diff --git a/app/HGProductionTool/dialog_inputserialnum.cpp b/app/HGProductionTool/dialog_inputserialnum.cpp index 52006cf..c63541c 100644 --- a/app/HGProductionTool/dialog_inputserialnum.cpp +++ b/app/HGProductionTool/dialog_inputserialnum.cpp @@ -68,7 +68,11 @@ Dialog_InputSerialNum::Dialog_InputSerialNum(class MainWindow *mainWnd, Dialog_l } if (m_handle != nullptr) + { m_hg = new hgscanner(nullptr, nullptr, this, m_handle); + func_test_uninit(NULL); + func_test_init(NULL, m_hg); + } connect(this, SIGNAL(testResult()), this, SLOT(on_testResult())); @@ -118,7 +122,7 @@ void Dialog_InputSerialNum::setSpeedMode() int speedMode = jsonGlobal.speed_mode; lp->cat = WRITE_CAT_SPEED; lp->val = (void*)&speedMode; - func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg); + func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp); delete lp; @@ -135,7 +139,7 @@ void Dialog_InputSerialNum::setSleepTime() int sleepTime = jsonGlobal.sleep_time; lp->cat = WRITE_CAT_SLEEP; lp->val = (void*)&sleepTime; - func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg); + func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp); delete lp; @@ -155,7 +159,7 @@ void Dialog_InputSerialNum::setVidPid() int vidpidValue = vidpid.Value; lp->cat = WRITE_CAT_VID_PID; lp->val = (void*)&vidpidValue; - func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg); + func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp); delete lp; @@ -187,7 +191,7 @@ void Dialog_InputSerialNum::setDevceModel() void Dialog_InputSerialNum::rebootDevice() { const wchar_t *p = L"0"; - func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg); + func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p); } int Dialog_InputSerialNum::getSpeedMode() diff --git a/app/HGProductionTool/form_burnmode.cpp b/app/HGProductionTool/form_burnmode.cpp index 4f5ec9c..0fad821 100644 --- a/app/HGProductionTool/form_burnmode.cpp +++ b/app/HGProductionTool/form_burnmode.cpp @@ -196,6 +196,8 @@ DeviceManager::DeviceManager(class MainWindow *mainwnd, class Form_BurnMode *bur m_serialNum = serialNum; m_hg = new hgscanner(nullptr, m_burnMode, nullptr, m_handle); + func_test_uninit(NULL); + func_test_init(NULL, m_hg); } DeviceManager::~DeviceManager() @@ -203,6 +205,8 @@ DeviceManager::~DeviceManager() delete m_hg; m_hg = nullptr; + func_test_uninit(NULL); + sane_close(m_handle); } @@ -220,7 +224,7 @@ void DeviceManager::setBurnMode() { const wchar_t *p = L"1"; // m_mainwnd->addTestingRef(); - func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg); + func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p); } @@ -233,7 +237,7 @@ void DeviceManager::setSpeedMode() int speedMode = jsonGlobal.speed_mode; lp->cat = WRITE_CAT_SPEED; lp->val = (void*)&speedMode; - func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg); + func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp); delete lp; } @@ -247,7 +251,7 @@ void DeviceManager::setSleepTime() int sleepTime = jsonGlobal.sleep_time; lp->cat = WRITE_CAT_SLEEP; lp->val = (void*)&sleepTime; - func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg); + func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp); delete lp; } @@ -264,7 +268,7 @@ void DeviceManager::setVidPid() int vidpidValue = vidpid.Value; lp->cat = WRITE_CAT_VID_PID; lp->val = (void*)&vidpidValue; - func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp, m_hg); + func_test_go(WRITE_CFG_NAME, (const wchar_t*)lp); delete lp; } @@ -272,7 +276,7 @@ void DeviceManager::setVidPid() void DeviceManager::rebootDevice() { const wchar_t *p = L"0"; - func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p, m_hg); + func_test_go(HGPDTTOOLDB_NAME_REBOOT_DEVICE, p); } QString DeviceManager::getDevType() diff --git a/app/HGProductionTool/form_maininterface.cpp b/app/HGProductionTool/form_maininterface.cpp index d9c1a74..6e3d02f 100644 --- a/app/HGProductionTool/form_maininterface.cpp +++ b/app/HGProductionTool/form_maininterface.cpp @@ -65,6 +65,8 @@ Form_mainInterface::Form_mainInterface(class MainWindow *mainwnd, Dialog_logIn:: if (m_handle) { m_hg = new hgscanner(this, nullptr, nullptr, m_handle); + func_test_uninit(NULL); + func_test_init(NULL, m_hg); } ui->label_devInfo->setText(tr("Device type:") + m_devType + tr(" SerialNum:") + m_serialNum + " " + tr("FirmwareNum:") + m_devFwNum); @@ -110,6 +112,8 @@ Form_mainInterface::~Form_mainInterface() delete m_hg; m_hg = nullptr; + func_test_uninit(NULL); + sane_close(m_handle); m_handle = nullptr; //HGPdtToolDb_CloseDevice(m_pdtToolDbDevice); @@ -148,6 +152,81 @@ void Form_mainInterface::setDevDisconnect() m_disconnect = true; } +void Form_mainInterface::checkWrongCorrectItem(int correctType) +{ + for (int i = 0; i < ui->tableWidget->rowCount(); i++) + { + QTableWidgetItem *item = ui->tableWidget->item(i, 1); + if (item != nullptr) + { + QString title = item->text(); + QString name = m_map_title_name.value(title).name; + + if (1 == correctType && HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackgroundColor(QColor(255,0,0)); + ui->tableWidget->item(i, 2)->setText(tr("not pass")); + } + else if (2 == correctType && HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackgroundColor(QColor(255,0,0)); + ui->tableWidget->item(i, 2)->setText(tr("not pass")); + } + else if (3 == correctType && HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackgroundColor(QColor(255,0,0)); + ui->tableWidget->item(i, 2)->setText(tr("not pass")); + } + else if (4 == correctType && HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackgroundColor(QColor(255,0,0)); + ui->tableWidget->item(i, 2)->setText(tr("not pass")); + } + else if (5 == correctType && HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackgroundColor(QColor(255,0,0)); + ui->tableWidget->item(i, 2)->setText(tr("not pass")); + } + else if (6 == correctType && HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackgroundColor(QColor(255,0,0)); + ui->tableWidget->item(i, 2)->setText(tr("not pass")); + } + } + } +} + +void Form_mainInterface::resetCorrectItems() +{ + for (int i = 0; i < ui->tableWidget->rowCount(); i++) + { + QTableWidgetItem *item = ui->tableWidget->item(i, 1); + if (item != nullptr) + { + QString title = item->text(); + QString name = m_map_title_name.value(title).name; + + if (HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI == name || + HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI == name || + HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI == name || + HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI == name || + HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI == name || + HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI == name) + { + ui->tableWidget->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->tableWidget->item(i, 2)->setBackground(Qt::transparent); + ui->tableWidget->item(i, 2)->setText(tr("not test")); + } + } + } +} + void Form_mainInterface::paintEvent(QPaintEvent *event) { (void)event; @@ -876,6 +955,11 @@ void Form_mainInterface::on_pbtn_start_clicked() QString title = item->text(); QString name = m_map_title_name.value(title).name; + if (name == HGPDTTOOLDB_NAME_IMAGE_CORRECTION) + { + resetCorrectItems(); + } + int dpi = 0; if (title == "扫描图像彩色质量确认_200dpi" || title == "扫描图像灰度质量确认_200dpi" || title == "计算畸变修正值_200dpi" || title == "设置畸变修正值_200dpi") dpi = 200; @@ -907,11 +991,11 @@ void Form_mainInterface::on_pbtn_start_clicked() if (buf != nullptr || (dpi > 0)) { - ret = func_test_go(name.toStdWString().c_str(), (const wchar_t*)buf, m_hg); + ret = func_test_go(name.toStdWString().c_str(), (const wchar_t*)buf); } else { - ret = func_test_go(name.toStdWString().c_str(), L"null", m_hg); + ret = func_test_go(name.toStdWString().c_str(), L"null"); } if (ret > SANE_STATUS_GOOD) diff --git a/app/HGProductionTool/form_maininterface.h b/app/HGProductionTool/form_maininterface.h index ce74191..5ab91c9 100644 --- a/app/HGProductionTool/form_maininterface.h +++ b/app/HGProductionTool/form_maininterface.h @@ -31,6 +31,8 @@ public: SANE_Handle getDevHandle(); hgscanner *getScanner(); void setDevDisconnect(); + void checkWrongCorrectItem(int correctType); //1:200dpi-color; 2:200dpi-gray;3:300dpi-color; 4:300dpi-gray;5:600dpi-color; 6:600dpi-gray; + void resetCorrectItems(); protected: void paintEvent(QPaintEvent *event) override; diff --git a/app/HGProductionTool/mainwindow.cpp b/app/HGProductionTool/mainwindow.cpp index 4a243ce..efd5228 100644 --- a/app/HGProductionTool/mainwindow.cpp +++ b/app/HGProductionTool/mainwindow.cpp @@ -4,6 +4,7 @@ #include #include "base/HGBase.h" #include "huagao/brand.h" +#include "huagao/hgscanner_error.h" #include "HGUIGlobal.h" #include "app_cfg.h" #include "dialog_login.h" @@ -526,6 +527,22 @@ void MainWindow::on_sane_create_interface(SaneParams *saneParams) { if (nullptr != mainInterface->getScanner() && nullptr != mainInterface->getScanner()->cb_) { + QString info = QString::fromStdString((char*)saneParams->data); + if (info == QString(STATU_DESC_SCANNER_ERR_IMAGE_CORRECTION_FINISHED)) + { + int type = 0; + func_test_correct(true, &type); + } + else if (info == QString(STATU_DESC_SCANNER_ERR_IMAGE_CORRECTION_FAIL)) + { + int type = 0; + func_test_correct(false, &type); + if (type > 0) + { + mainInterface->checkWrongCorrectItem(type); + } + } + mainInterface->getScanner()->cb_(saneParams->hdev, saneParams->code, saneParams->data, &saneParams->len, mainInterface->getScanner()); } } diff --git a/code/base/test_base.cpp b/code/base/test_base.cpp index 510b8dd..b44bf3b 100644 --- a/code/base/test_base.cpp +++ b/code/base/test_base.cpp @@ -2,60 +2,63 @@ #include #include #include -#include #include #include "huagao/hgscanner_error.h" #include "sane/sane_option_definitions.h"; + +test *test_ = nullptr; + static struct Test_Map { const wchar_t* name; // DIAL_SWITCH const wchar_t* title; // 歪斜检测 }Test_Map_NO[] = { - {HGPDTTOOLDB_NAME_DIAL_SWITCH ,HGPDTTOOLDB_TITLE_DIAL_SWITCH}, - {HGPDTTOOLDB_NAME_ROCKER_SWITCH ,HGPDTTOOLDB_TITLE_ROCKER_SWITCH}, - {HGPDTTOOLDB_NAME_BOOT_STATUS ,HGPDTTOOLDB_TITLE_BOOT_STATUS}, - {HGPDTTOOLDB_NAME_LCD_DISPLAY ,HGPDTTOOLDB_TITLE_LCD_DISPLAY}, - {HGPDTTOOLDB_NAME_KEY_FUNCTION ,HGPDTTOOLDB_TITLE_KEY_FUNCTION}, - {HGPDTTOOLDB_NAME_COUNTING_MODE ,HGPDTTOOLDB_TITLE_COUNTING_MODE}, - {HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE ,HGPDTTOOLDB_TITLE_CIS_ORIGINAL_IMAGE}, - {HGPDTTOOLDB_NAME_HOST_FAN ,HGPDTTOOLDB_TITLE_HOST_FAN}, - {HGPDTTOOLDB_NAME_SCAN_WORKING_STATUS ,HGPDTTOOLDB_TITLE_SCAN_WORKING_STATUS}, - {HGPDTTOOLDB_NAME_USB_PC_INTERFACE ,HGPDTTOOLDB_TITLE_USB_PC_INTERFACE}, - {HGPDTTOOLDB_NAME_LED_LIGHT ,HGPDTTOOLDB_TITLE_LED_LIGHT}, - {HGPDTTOOLDB_NAME_RESET ,HGPDTTOOLDB_TITLE_RESET}, - {HGPDTTOOLDB_NAME_PAPER_FEED ,HGPDTTOOLDB_TITLE_PAPER_FEED}, - {HGPDTTOOLDB_NAME_SCANNING_SENSOR ,HGPDTTOOLDB_TITLE_SCANNING_SENSOR}, - {HGPDTTOOLDB_NAME_PLACE_CORRECTION_PAPER ,HGPDTTOOLDB_TITLE_PLACE_CORRECTION_PAPER}, - {HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD ,HGPDTTOOLDB_TITLE_AUTO_FLAT_FIELD}, - {HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY ,HGPDTTOOLDB_TITLE_IMAGE_QUALITY}, - {HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY ,HGPDTTOOLDB_TITLE_COLORCARD_IMAGEING_QUALITY}, - {HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY ,HGPDTTOOLDB_TITLE_COLORCARD_BIAS_IMAGEING_QUALITY}, - {HGPDTTOOLDB_NAME_CLARITY_QUALITY ,HGPDTTOOLDB_TITLE_CLARITY_QUALITY}, - {HGPDTTOOLDB_NAME_GET_DISTORTION_VAL ,HGPDTTOOLDB_TITLE_DISTORTION}, - {HGPDTTOOLDB_NAME_SEPARATER_MOTOR ,HGPDTTOOLDB_TITLE_SEPARATER_MOTOR}, - {HGPDTTOOLDB_NAME_CLEAR_PAPER_PATH ,HGPDTTOOLDB_TITLE_CLEAR_PAPER_PATH}, - {HGPDTTOOLDB_NAME_SKEW_DETECTION ,HGPDTTOOLDB_TITLE_SKEW_DETECTION}, - {HGPDTTOOLDB_NAME_ULTRASONIC_MODULE ,HGPDTTOOLDB_TITLE_ULTRASONIC_MODULE}, - {HGPDTTOOLDB_NAME_COVER_SENSOR ,HGPDTTOOLDB_TITLE_COVER_SENSOR }, - {HGPDTTOOLDB_NAME_REBOOT_DEVICE ,HGPDTTOOLDB_TITLE_REBOOT_DEVICE}, - {HGPDTTOOLDB_NAME_MECH_PAPER_FEEDING_INCLINATION ,HGPDTTOOLDB_TITLE_MECH_PAPER_FEEDING_INCLINATION}, - {HGPDTTOOLDB_NAME_CLEAR_ROLLER_COUNT ,HGPDTTOOLDB_TITLE_CLEAR_ROLLER_COUNT}, - {HGPDTTOOLDB_NAME_CLEAR_HISTORY_COUNT ,HGPDTTOOLDB_TITLE_CLEAR_HISTORY_COUNT}, - {HGPDTTOOLDB_NAME_PAPER_SEPARATION_STRENGTH ,HGPDTTOOLDB_TITLE_PAPER_SEPARATION_STRENGTH}, - {HGPDTTOOLDB_NAME_CONFIGURE_SPEED_MODE ,HGPDTTOOLDB_TITLE_CONFIGURE_SPEED_MODE}, - {HGPDTTOOLDB_NAME_DORMANCY ,HGPDTTOOLDB_TITLE_DORMANCY}, - {HGPDTTOOLDB_NAME_GET_DEVICE_CONFIG ,HGPDTTOOLDB_TITLE_GET_DEVICE_CONFIG}, - {HGPDTTOOLDB_NAME_GET_DEVICE_CPU_DISK ,HGPDTTOOLDB_TITLE_GET_DEVICE_CPU_DISK}, - {HGPDTTOOLDB_NAME_BACKUP ,HGPDTTOOLDB_TITLE_BACKUP}, - {HGPDTTOOLDB_NAME_SHUTDOWN ,HGPDTTOOLDB_TITLE_SHUTDOWN}, - {HGPDTTOOLDB_NAME_SET_FIRMWARE_LANGUAGE ,HGPDTTOOLDB_TITLE_SET_FIRMWARE_LANGUAGE}, - {HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_200DPI}, - {HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_200DPI}, - {HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_300DPI}, - {HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_300DPI}, - {HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_600DPI}, - {HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_600DPI} +{HGPDTTOOLDB_NAME_DIAL_SWITCH ,HGPDTTOOLDB_TITLE_DIAL_SWITCH}, +{HGPDTTOOLDB_NAME_ROCKER_SWITCH ,HGPDTTOOLDB_TITLE_ROCKER_SWITCH}, +{HGPDTTOOLDB_NAME_BOOT_STATUS ,HGPDTTOOLDB_TITLE_BOOT_STATUS}, +{HGPDTTOOLDB_NAME_LCD_DISPLAY ,HGPDTTOOLDB_TITLE_LCD_DISPLAY}, +{HGPDTTOOLDB_NAME_KEY_FUNCTION ,HGPDTTOOLDB_TITLE_KEY_FUNCTION}, +{HGPDTTOOLDB_NAME_COUNTING_MODE ,HGPDTTOOLDB_TITLE_COUNTING_MODE}, +{HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE ,HGPDTTOOLDB_TITLE_CIS_ORIGINAL_IMAGE}, +{HGPDTTOOLDB_NAME_HOST_FAN ,HGPDTTOOLDB_TITLE_HOST_FAN}, +{HGPDTTOOLDB_NAME_SCAN_WORKING_STATUS ,HGPDTTOOLDB_TITLE_SCAN_WORKING_STATUS}, +{HGPDTTOOLDB_NAME_USB_PC_INTERFACE ,HGPDTTOOLDB_TITLE_USB_PC_INTERFACE}, +{HGPDTTOOLDB_NAME_LED_LIGHT ,HGPDTTOOLDB_TITLE_LED_LIGHT}, +{HGPDTTOOLDB_NAME_RESET ,HGPDTTOOLDB_TITLE_RESET}, +{HGPDTTOOLDB_NAME_PAPER_FEED ,HGPDTTOOLDB_TITLE_PAPER_FEED}, +{HGPDTTOOLDB_NAME_SCANNING_SENSOR ,HGPDTTOOLDB_TITLE_SCANNING_SENSOR}, +{HGPDTTOOLDB_NAME_PLACE_CORRECTION_PAPER ,HGPDTTOOLDB_TITLE_PLACE_CORRECTION_PAPER}, +{HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD ,HGPDTTOOLDB_TITLE_AUTO_FLAT_FIELD}, +{HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY ,HGPDTTOOLDB_TITLE_IMAGE_QUALITY}, +{HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY ,HGPDTTOOLDB_TITLE_COLORCARD_IMAGEING_QUALITY}, +{HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY ,HGPDTTOOLDB_TITLE_COLORCARD_BIAS_IMAGEING_QUALITY}, +{HGPDTTOOLDB_NAME_CLARITY_QUALITY ,HGPDTTOOLDB_TITLE_CLARITY_QUALITY}, +{HGPDTTOOLDB_NAME_GET_DISTORTION_VAL ,HGPDTTOOLDB_TITLE_DISTORTION}, +{HGPDTTOOLDB_NAME_SEPARATER_MOTOR ,HGPDTTOOLDB_TITLE_SEPARATER_MOTOR}, +{HGPDTTOOLDB_NAME_CLEAR_PAPER_PATH ,HGPDTTOOLDB_TITLE_CLEAR_PAPER_PATH}, +{HGPDTTOOLDB_NAME_SKEW_DETECTION ,HGPDTTOOLDB_TITLE_SKEW_DETECTION}, +{HGPDTTOOLDB_NAME_ULTRASONIC_MODULE ,HGPDTTOOLDB_TITLE_ULTRASONIC_MODULE}, +{HGPDTTOOLDB_NAME_COVER_SENSOR ,HGPDTTOOLDB_TITLE_COVER_SENSOR }, +{HGPDTTOOLDB_NAME_REBOOT_DEVICE ,HGPDTTOOLDB_TITLE_REBOOT_DEVICE}, +{HGPDTTOOLDB_NAME_MECH_PAPER_FEEDING_INCLINATION ,HGPDTTOOLDB_TITLE_MECH_PAPER_FEEDING_INCLINATION}, +{HGPDTTOOLDB_NAME_CLEAR_ROLLER_COUNT ,HGPDTTOOLDB_TITLE_CLEAR_ROLLER_COUNT}, +{HGPDTTOOLDB_NAME_CLEAR_HISTORY_COUNT ,HGPDTTOOLDB_TITLE_CLEAR_HISTORY_COUNT}, +{HGPDTTOOLDB_NAME_PAPER_SEPARATION_STRENGTH ,HGPDTTOOLDB_TITLE_PAPER_SEPARATION_STRENGTH}, +{HGPDTTOOLDB_NAME_CONFIGURE_SPEED_MODE ,HGPDTTOOLDB_TITLE_CONFIGURE_SPEED_MODE}, +{HGPDTTOOLDB_NAME_DORMANCY ,HGPDTTOOLDB_TITLE_DORMANCY}, +{HGPDTTOOLDB_NAME_GET_DEVICE_CONFIG ,HGPDTTOOLDB_TITLE_GET_DEVICE_CONFIG}, +{HGPDTTOOLDB_NAME_GET_DEVICE_CPU_DISK ,HGPDTTOOLDB_TITLE_GET_DEVICE_CPU_DISK}, +{HGPDTTOOLDB_NAME_BACKUP ,HGPDTTOOLDB_TITLE_BACKUP}, +{HGPDTTOOLDB_NAME_SHUTDOWN ,HGPDTTOOLDB_TITLE_SHUTDOWN}, +{HGPDTTOOLDB_NAME_SET_FIRMWARE_LANGUAGE ,HGPDTTOOLDB_TITLE_SET_FIRMWARE_LANGUAGE}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_200DPI}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_200DPI}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_300DPI}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_300DPI}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_600DPI}, +{HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI ,HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_600DPI} }; static std::string StringToUtf(std::string strValue) @@ -89,7 +92,7 @@ static int str_to_wchar(std::string str, wchar_t* s, size_t* strlen) MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, s, len); return 0; } -static int wchar_to_char(std::string &str, wchar_t* s, size_t* strlen) +static int wchar_to_char(std::string& str, wchar_t* s, size_t* strlen) { if (!s) return ERROR_INSUFFICIENT_BUFFER; @@ -101,7 +104,7 @@ static int wchar_to_char(std::string &str, wchar_t* s, size_t* strlen) return ERROR_INSUFFICIENT_BUFFER; } - WideCharToMultiByte(CP_ACP, 0, s, -1, (char *)str.c_str(), len, NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, s, -1, (char*)str.c_str(), len, NULL, NULL); return 0; } int get_json_config_file() @@ -132,1599 +135,1678 @@ int get_json_config_file() fclose(fp); std::cout << buf << std::endl; } -static std::wstring set_test_name_ =L""; +static std::wstring set_test_name_ = L""; //bool is_distortion_get_image = false; //bool is_distortion_get_image_abnormal = false; std::atomic is_distortion_get_image_abnormal(false); std::atomic is_distortion_get_image(false); -class test + +int g_currentCorrectType = 0; +int g_dynamicCorrectStatus = SCANNER_ERR_OK; + +/*设置vid pid*/ +int test::test_set_vidpid(void* data) { - ui_helper* helper_; - int fw_; - - /*设置vid pid*/ - int test_set_vidpid(void* data) + unsigned int len = sizeof(int); + int set_vidpid = *((int*)data), + get_vidpid = 0, + ret = SCANNER_ERR_OK; + ret = helper_->io_control(IO_CTRL_CODE_SET_VIDPID, &set_vidpid, &len); + if (ret == SCANNER_ERR_OK) { - unsigned int len = sizeof(int); - int set_vidpid = *((int*)data), - get_vidpid = 0, - ret = SCANNER_ERR_OK; - ret = helper_->io_control(IO_CTRL_CODE_SET_VIDPID, &set_vidpid, &len); - if (ret == SCANNER_ERR_OK) - { - ret = helper_->io_control(IO_CTRL_CODE_GET_VIDPID, &get_vidpid, &len); - if (set_vidpid == get_vidpid) - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置vidpid成功", true); - else - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置vidpid失败", false); - } - return ret; + ret = helper_->io_control(IO_CTRL_CODE_GET_VIDPID, &get_vidpid, &len); + if (set_vidpid == get_vidpid) + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置vidpid成功", true); + else + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置vidpid失败", false); } - /*设置序列号*/ - int test_set_serial_num(void* data) + return ret; +} +/*设置序列号*/ +int test::test_set_serial_num(void* data) +{ + wchar_t* sn = (wchar_t*)data; + + std::string set_sn, + get_sn; + int ret = SCANNER_ERR_OK; + size_t len = 0; + ret = wchar_to_char(set_sn, sn, &len); + if (ret == ERROR_INSUFFICIENT_BUFFER) { - wchar_t* sn = (wchar_t*)data; - - std::string set_sn, - get_sn; - int ret = SCANNER_ERR_OK; - size_t len = 0; + set_sn.resize(len); ret = wchar_to_char(set_sn, sn, &len); - if (ret == ERROR_INSUFFICIENT_BUFFER) + } + unsigned int setlen = set_sn.size(), + getlen = 0; + + ret = helper_->io_control(IO_CTRL_CODE_SET_SERIAL, &set_sn[0], &setlen); + + if (ret != SCANNER_ERR_OK)return ret; + + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置序列号完成", true); + + return ret; +} +/* 设置休眠 */ +int test::test_dormancy(void* data) +{ + const wchar_t sleep_buf[8] = { 0,5,10,20,30,60,120,240 }; + int sleep_time = *((int*)data); + SANE_Power power; + unsigned int len = sizeof(SANE_Power); + + for (size_t i = 0; i < 8; i++) + { + if (sleep_buf[i] == sleep_time) { - set_sn.resize(len); - ret = wchar_to_char(set_sn, sn, &len); + power = (SANE_Power)i; + break; } - unsigned int setlen = set_sn.size(), - getlen = 0; - - ret = helper_->io_control(IO_CTRL_CODE_SET_SERIAL, &set_sn[0], &setlen); - - if (ret != SCANNER_ERR_OK)return ret; - - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置序列号完成", true); - + else + power = SANE_POWER_NONE; + } + int ret = helper_->io_control(IO_CTRL_CODE_SET_POWER_LEVEL, &power, &len); + if (ret != SCANNER_ERR_OK) + { return ret; } - /* 设置休眠 */ - int test_dormancy(void* data) - { - const wchar_t sleep_buf[8] = { 0,5,10,20,30,60,120,240 }; - int sleep_time = *((int*)data); - SANE_Power power; - unsigned int len = sizeof(SANE_Power); + int gettime = 0; + unsigned int timelen = sizeof(int*); - for (size_t i = 0; i < 8; i++) + ret = helper_->io_control(IO_CTRL_CODE_GET_POWER_LEVEL, &gettime, &timelen); + + if (gettime == INT_MAX || gettime == -1) + gettime = 0; + else + gettime /= 60; + + if (sleep_time == gettime) + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置休眠时间成功", true); + else + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置休眠时间失败", false); + return ret; +} +/*获取固件版本号*/ +std::string test::get_firmware_version() +{ + std::string fw = ""; + unsigned int len = 0; + int ret = helper_->io_control(IO_CTRL_CODE_GET_HARDWARE_VERSION, &fw[0], &len); + fw.resize(len); + ret = helper_->io_control(IO_CTRL_CODE_GET_HARDWARE_VERSION, &fw[0], &len); + + return fw; +} +/* 配置速度模式 */ +int test::test_configure_speed_mode(void* data) +{ + unsigned int len = sizeof(int); + int speed_mode = *((int*)data); + bool type = false; + const char G139[6] = { 60,70,80,90,110 }; + const char G239[6] = { 90,100,110,120,130 }; + const char G300[6] = { 40,50,60,70,80,90 }; + const char G306[6] = { 30,40,50,60,70 }; + const char G400[6] = { 40,50,60,70,80 }; + + std::string fv(get_firmware_version()); + if (fv.empty()) + { + return -1; + } + std::string str = fv.substr(0, 2); + std::string str1 = fv.substr(0, 4); + std::string str2 = fv.substr(3, 1); + + //3399设备直接设置实际速度,3288设备设置速度模式为1 2 3 4 5 + if (str2 == "Z" && speed_mode >= 30 && speed_mode <= 70) + { + for (size_t i = 0; i < sizeof(G306) / sizeof(G306[0]); i++) { - if (sleep_buf[i] == sleep_time) + if (G306[i] == speed_mode) { - power = (SANE_Power)i; + speed_mode = i + 1; break; } - else - power = SANE_POWER_NONE; } - int ret = helper_->io_control(IO_CTRL_CODE_SET_POWER_LEVEL, &power, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - int gettime = 0; - unsigned int timelen = sizeof(int*); - - ret = helper_->io_control(IO_CTRL_CODE_GET_POWER_LEVEL, &gettime, &timelen); - - if (gettime == INT_MAX || gettime == -1) - gettime = 0; - else - gettime /= 60; - - if (sleep_time == gettime) - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置休眠时间成功", true); - else - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置休眠时间失败", false); - return ret; } - /*获取固件版本号*/ - std::string get_firmware_version() + else if (str == "G3" && speed_mode >= 40 && speed_mode <= 90) { - std::string fw = ""; - unsigned int len = 0; - int ret = helper_->io_control(IO_CTRL_CODE_GET_HARDWARE_VERSION, &fw[0], &len); - fw.resize(len); - ret = helper_->io_control(IO_CTRL_CODE_GET_HARDWARE_VERSION, &fw[0], &len); - - return fw; - } - /* 配置速度模式 */ - int test_configure_speed_mode(void* data) - { - unsigned int len = sizeof(int); - int speed_mode = *((int*)data); - bool type = false; - const char G139[6] = { 60,70,80,90,110 }; - const char G239[6] = { 90,100,110,120,130 }; - const char G300[6] = { 40,50,60,70,80,90 }; - const char G306[6] = { 30,40,50,60,70 }; - const char G400[6] = { 40,50,60,70,80 }; - - std::string fv(get_firmware_version()); - if (fv.empty()) + for (size_t i = 0; i < sizeof(G300) / sizeof(G300[0]); i++) { - return -1; - } - std::string str = fv.substr(0, 2); - std::string str1 = fv.substr(0, 4); - std::string str2 = fv.substr(3, 1); - - //3399设备直接设置实际速度,3288设备设置速度模式为1 2 3 4 5 - if (str2 == "Z" && speed_mode >= 30 && speed_mode <= 70) - { - for (size_t i = 0; i < sizeof(G306) / sizeof(G306[0]); i++) + if (G300[i] == speed_mode) { - if (G306[i] == speed_mode) + speed_mode = i + 1; + break; + } + } + } + else if (str == "G4" && speed_mode >= 40 && speed_mode <= 80) + { + if (str1 != "G439") + { + for (size_t i = 0; i < sizeof(G400) / sizeof(G400[0]); i++) + { + if (G400[i] == speed_mode) { speed_mode = i + 1; break; } } } - else if (str == "G3" && speed_mode >= 40 && speed_mode <= 90) - { - for (size_t i = 0; i < sizeof(G300) / sizeof(G300[0]); i++) - { - if (G300[i] == speed_mode) - { - speed_mode = i + 1; - break; - } - } - } - else if (str == "G4" && speed_mode >= 40 && speed_mode <= 80) - { - if (str1 != "G439") - { - for (size_t i = 0; i < sizeof(G400) / sizeof(G400[0]); i++) - { - if (G400[i] == speed_mode) - { - speed_mode = i + 1; - break; - } - } - } - } - - int ret = helper_->io_control(IO_CTRL_CODE_SET_SPEED_MODE, &speed_mode, &len); - return ret; } -public: - - static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param) - { - if (!hdev && !param) - { - return -1; - } - ui_helper* h= (ui_helper*)param; - std::wstring wstr = L""; - size_t l = 0; - bool type = true; - wchar_t buf[128] =L""; - int ret = SCANNER_ERR_OK; - if (code != SANE_EVENT_IMAGE_OK) + int ret = helper_->io_control(IO_CTRL_CODE_SET_SPEED_MODE, &speed_mode, &len); + return ret; +} + +static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param) +{ + if (!hdev && !param) + { + return -1; + } + ui_helper* h = (ui_helper*)param; + + std::wstring wstr = L""; + size_t l = 0; + bool type = true; + wchar_t buf[128] = L""; + int ret = SCANNER_ERR_OK; + if (code != SANE_EVENT_IMAGE_OK) + { + ret = str_to_wchar((char*)data, (wchar_t*)wstr.c_str(), &l); + if (ret == ERROR_INSUFFICIENT_BUFFER) { + wstr.resize(l); ret = str_to_wchar((char*)data, (wchar_t*)wstr.c_str(), &l); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - wstr.resize(l); - ret = str_to_wchar((char*)data, (wchar_t*)wstr.c_str(), &l); - } - if (ret == ERROR_INSUFFICIENT_BUFFER) + } + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + type = false; + + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), type); + return -1; + } + } + + //std::string str = StringToUtf((char*)data); + switch (code) + { + case SANE_EVENT_SCAN_FINISHED: + { + SANE_Bool close = false; + unsigned int closelen = sizeof(SANE_Bool); + + if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SKEW_DETECTION) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_PAPER_SKEW) != 0) { type = false; - - h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), type); - return -1; + wcscpy(buf, L"未检测到纸张倾斜, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_ULTRASONIC_MODULE) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_DOUBLE_FEEDING) != 0) + { + type = false; + wcscpy(buf, L"未检测到双张, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COVER_SENSOR) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_COVER_OPENNED) != 0) + { + type = false;; + wcscpy(buf, L"未检测到设备开盖, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PAPER_FEED) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"走纸检测失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) != 0) + { + type = false; + wcscpy(buf, L"平场校正失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_GET_DISTORTION_VAL) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CONFIRM_DISTORTION_VAL) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0 || strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_DISTORTION) == 0) + { + type = false; + is_distortion_get_image = false; + is_distortion_get_image_abnormal = true; + wcscpy(buf, L"畸变修正值获取失败,原因--->"); + } + else + { + is_distortion_get_image = true; + //type = true; + //wcscpy(buf, L"畸变修正值获取完成:"); + break; + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_GRAY_QUALITY) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"扫描图像质量确认失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SCANNING_SENSOR) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"扫描传感器检查失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"CIS原图初检, 原因--->"); + } + h->io_control(IO_CTRL_CODE_SET_CIS_IMAGE, &close, &closelen); + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_200DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_200DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_300DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_300DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_600DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_600DPI) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"压力测试失败, 原因--->"); + } + else + { + type = true; + wcscpy(buf, L"压力测试完成--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"色卡纸成像质量评估失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"色卡纸偏色成像质量评估失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CLARITY_QUALITY) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"清晰度质量评估失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) + { + type = false; + wcscpy(buf, L"单张测试失败, 原因--->"); + } + } + else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI) == 0) + { + if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_IMAGE_CORRECTION_FAIL) == 0) + { + type = false; + } + else + { + type = true; } } - //std::string str = StringToUtf((char*)data); - switch (code) - { - case SANE_EVENT_SCAN_FINISHED: - { - SANE_Bool close = false; - unsigned int closelen = sizeof(SANE_Bool); + wcscat(buf, wstr.c_str()); + //ret = h->io_control(IO_CTRL_CODE_RESTORE_SETTINGS, NULL, NULL);//结束恢复默认 - if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SKEW_DETECTION) == 0) + if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION) == 0) + { + if (g_dynamicCorrectStatus == SCANNER_ERR_IMAGE_CORRECTION_FAIL || g_currentCorrectType == 6) { - if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_PAPER_SKEW) != 0) - { - type = false; - wcscpy(buf, L"未检测到纸张倾斜, 原因--->"); - } + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)buf, type); } - else if(wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_ULTRASONIC_MODULE) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_DOUBLE_FEEDING) != 0) - { - type = false; - wcscpy(buf, L"未检测到双张, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COVER_SENSOR) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_COVER_OPENNED) != 0) - { - type = false;; - wcscpy(buf, L"未检测到设备开盖, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PAPER_FEED) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"走纸检测失败, 原因--->"); - } - } - else if(wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) != 0) - { - type = false; - wcscpy(buf, L"平场校正失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_GET_DISTORTION_VAL) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CONFIRM_DISTORTION_VAL) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0 || strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_DISTORTION) == 0) - { - type = false; - is_distortion_get_image = false; - is_distortion_get_image_abnormal = true; - wcscpy(buf, L"畸变修正值获取失败,原因--->"); - } - else - { - is_distortion_get_image = true; - //type = true; - //wcscpy(buf, L"畸变修正值获取完成:"); - break; - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_GRAY_QUALITY) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"扫描图像质量确认失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SCANNING_SENSOR) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"扫描传感器检查失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"CIS原图初检, 原因--->"); - } - h->io_control(IO_CTRL_CODE_SET_CIS_IMAGE, &close, &closelen); - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_200DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_200DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_300DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_300DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_600DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_600DPI) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"压力测试失败, 原因--->"); - } - else - { - type = true; - wcscpy(buf, L"压力测试完成--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"色卡纸成像质量评估失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"色卡纸偏色成像质量评估失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CLARITY_QUALITY) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"清晰度质量评估失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) != 0) - { - type = false; - wcscpy(buf, L"单张测试失败, 原因--->"); - } - } - else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI) == 0 + } + else + { + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)buf, type); + } + } + break; + case SANE_EVENT_ERROR: + { + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), false); + } + break; + case SANE_EVENT_STATUS: + { + if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD) == 0) + { + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_FALT_INFO, (wchar_t*)wstr.c_str(), type); + } + } + break; + case SANE_EVENT_IMAGE_OK: + { + if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SKEW_DETECTION) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_GRAY_QUALITY) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_GET_DISTORTION_VAL) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CONFIRM_DISTORTION_VAL) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SCANNING_SENSOR) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CLARITY_QUALITY) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_200DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_200DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_300DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_300DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_600DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_600DPI) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION) == 0 + || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI) == 0 || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI) == 0) - { - if (strcmp((char*)data, STATU_DESC_SCANNER_ERR_IMAGE_CORRECTION_FAIL) == 0) - { - type = false; - } - else - { - type = true; - } - } - wcscat(buf, wstr.c_str()); - //ret = h->io_control(IO_CTRL_CODE_RESTORE_SETTINGS, NULL, NULL);//结束恢复默认 - - h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)buf, type); - } - break; - case SANE_EVENT_ERROR: { - h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), false); - } - break; - case SANE_EVENT_STATUS: - { - if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD) == 0) + if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_GET_DISTORTION_VAL) == 0) { - h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_FALT_INFO, (wchar_t*)wstr.c_str(), type); + is_distortion_get_image = true; } + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_HAVE_IMAGE, data, true); } - break; - case SANE_EVENT_IMAGE_OK: - { - if ( wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE) == 0 - ||wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SKEW_DETECTION) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_GRAY_QUALITY) == 0 - ||wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_GET_DISTORTION_VAL) == 0 - ||wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CONFIRM_DISTORTION_VAL) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SCANNING_SENSOR) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CLARITY_QUALITY) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_200DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_200DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_300DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_300DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_600DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_600DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI) == 0 - || wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI) == 0) - - { - if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_GET_DISTORTION_VAL) == 0) - { - is_distortion_get_image = true; - } - h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_HAVE_IMAGE, data, true); - } - } - break; - } - return 0; } - test(ui_helper* helper) :helper_(helper), fw_(0) - { - helper->register_sane_callback(sane_ex_callback, NULL); - init_test_map_(); + break; } - ~test() - {} + return 0; +} +test::test(ui_helper* helper) +{ + helper_ = helper; + helper_->register_sane_callback(sane_ex_callback, NULL); + init_test_map_(); +} +test::~test() +{ + g_currentCorrectType = 0; + m_waitCorrect.notify_all(); + if (thread_dynamic_correct_handle.get() && thread_dynamic_correct_handle->joinable()) + thread_dynamic_correct_handle->join(); +} - std::map test_map_; - void init_test_map_() +void test::init_test_map_() +{ + test_map_[WRITE_CFG_NAME] = &test::set_init_cfg; + test_map_[HGPDTTOOLDB_NAME_SET_JSON_SN] = &test::test_set_json_serial_num; + test_map_[HGPDTTOOLDB_NAME_CLEAR_PAPER_PATH] = &test::tset_clear_paper_path; + test_map_[HGPDTTOOLDB_NAME_KEY_FUNCTION] = &test::test_key_funtion; + test_map_[HGPDTTOOLDB_NAME_COUNTING_MODE] = &test::test_count_mode; + test_map_[HGPDTTOOLDB_NAME_SKEW_DETECTION] = &test::test_skew_detection; + test_map_[HGPDTTOOLDB_NAME_SEPARATER_MOTOR] = &test::test_separater_motor; + test_map_[HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE] = &test::test_cis__original_image; + test_map_[HGPDTTOOLDB_NAME_HOST_FAN] = &test::test_host_fan; + test_map_[HGPDTTOOLDB_NAME_SCAN_WORKING_STATUS] = &test::test_scan_work_status; + test_map_[HGPDTTOOLDB_NAME_USB_PC_INTERFACE] = &test::test_usb_pc_interface; + test_map_[HGPDTTOOLDB_NAME_ULTRASONIC_MODULE] = &test::test_ultrasonic_module; + test_map_[HGPDTTOOLDB_NAME_LED_LIGHT] = &test::test_led_light; + test_map_[HGPDTTOOLDB_NAME_RESET] = &test::test_reset; + test_map_[HGPDTTOOLDB_NAME_PAPER_FEED] = &test::test_paper_feed; + test_map_[HGPDTTOOLDB_NAME_SCANNING_SENSOR] = &test::test_scanning_sensor; + test_map_[HGPDTTOOLDB_NAME_CONFIGURE_SPEED_MODE] = &test::test_configure_speed_mode; + test_map_[HGPDTTOOLDB_NAME_PLACE_CORRECTION_PAPER] = &test::test_place_correction_paper; + test_map_[HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD] = &test::test_auto_flat_field; + test_map_[HGPDTTOOLDB_NAME_REBOOT_DEVICE] = &test::test_reboot_device; + + test_map_[HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY] = &test::test_image_color_quality; + test_map_[HGPDTTOOLDB_NAME_IMAGE_GRAY_QUALITY] = &test::test_image_gray_quality; + + test_map_[HGPDTTOOLDB_NAME_GET_DISTORTION_VAL] = &test::test_get_auto_distortion; + test_map_[HGPDTTOOLDB_NAME_SET_DISTORTION_VAL] = &test::test_set_auto_distortion; + test_map_[HGPDTTOOLDB_NAME_CONFIRM_DISTORTION_VAL] = &test::test_confirm_auto_distortion; + test_map_[HGPDTTOOLDB_NAME_DORMANCY] = &test::test_dormancy; + test_map_[HGPDTTOOLDB_NAME_PAPER_SEPARATION_STRENGTH] = &test::test_paper_separation_strength; + test_map_[HGPDTTOOLDB_NAME_MECH_PAPER_FEEDING_INCLINATION] = &test::test_mech_paper_feeding_inclination; + test_map_[HGPDTTOOLDB_NAME_CLEAR_ROLLER_COUNT] = &test::test_clear_roller_count; + test_map_[HGPDTTOOLDB_NAME_CLEAR_HISTORY_COUNT] = &test::test_clear_history_count; + + test_map_[HGPDTTOOLDB_NAME_COVER_SENSOR] = &test::test_single_page_test; + test_map_[HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST] = &test::test_single_page_test; + test_map_[HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY] = &test::test_single_page_test; + test_map_[HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY] = &test::test_single_page_test; + test_map_[HGPDTTOOLDB_NAME_CLARITY_QUALITY] = &test::test_single_page_test; + + test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_200DPI] = &test::test_pressuer_test_rgb_200dpi; + test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_200DPI] = &test::test_pressuer_test_gray_200dpi; + test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_300DPI] = &test::test_pressuer_test_rgb_300dpi; + test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_300DPI] = &test::test_pressuer_test_gray_300dpi; + test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_600DPI] = &test::test_pressuer_test_rgb_600dpi; + test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_600DPI] = &test::test_pressuer_test_gray_600dpi; + test_map_[HGPDTTOOLDB_NAME_GET_DEVICE_CONFIG] = &test::test_get_device_config; + test_map_[HGPDTTOOLDB_NAME_GET_DEVICE_CPU_DISK] = &test::test_get_device_cpu_disk; + test_map_[HGPDTTOOLDB_NAME_BACKUP] = &test::test_backup; + test_map_[HGPDTTOOLDB_NAME_SHUTDOWN] = &test::test_shutdown; + test_map_[HGPDTTOOLDB_NAME_SET_FIRMWARE_LANGUAGE] = &test::test_set_firmware_language; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION] = &test::test_image_correct_all; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI] = &test::test_image_correct_rgb_200dpi; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI] = &test::test_image_correct_gray_200dpi; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI] = &test::test_image_correct_rgb_300dpi; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI] = &test::test_image_correct_gray_300dpi; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI] = &test::test_image_correct_rgb_600dpi; + test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI] = &test::test_image_correct_gray_600dpi; +} +int test::set_test(const wchar_t* name, const wchar_t* oper) +{ + + if (wcscmp(name, HGPDTTOOLDB_NAME_SET_JSON_SN) == 0 + || wcscmp(name, HGPDTTOOLDB_NAME_GET_DEVICE_CONFIG) == 0 + || wcscmp(name, HGPDTTOOLDB_NAME_CONFIGURE_SPEED_MODE) == 0 + || wcscmp(name, WRITE_CFG_NAME) == 0) { - test_map_[WRITE_CFG_NAME] = &test::set_init_cfg; - test_map_[HGPDTTOOLDB_NAME_SET_JSON_SN] = &test::test_set_json_serial_num; - test_map_[HGPDTTOOLDB_NAME_CLEAR_PAPER_PATH] = &test::tset_clear_paper_path; - test_map_[HGPDTTOOLDB_NAME_KEY_FUNCTION] = &test::test_key_funtion; - test_map_[HGPDTTOOLDB_NAME_COUNTING_MODE] = &test::test_count_mode; - test_map_[HGPDTTOOLDB_NAME_SKEW_DETECTION] = &test::test_skew_detection; - test_map_[HGPDTTOOLDB_NAME_SEPARATER_MOTOR] = &test::test_separater_motor; - test_map_[HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE] = &test::test_cis__original_image; - test_map_[HGPDTTOOLDB_NAME_HOST_FAN] = &test::test_host_fan; - test_map_[HGPDTTOOLDB_NAME_SCAN_WORKING_STATUS] = &test::test_scan_work_status; - test_map_[HGPDTTOOLDB_NAME_USB_PC_INTERFACE] = &test::test_usb_pc_interface; - test_map_[HGPDTTOOLDB_NAME_ULTRASONIC_MODULE] = &test::test_ultrasonic_module; - test_map_[HGPDTTOOLDB_NAME_LED_LIGHT] = &test::test_led_light; - test_map_[HGPDTTOOLDB_NAME_RESET] = &test::test_reset; - test_map_[HGPDTTOOLDB_NAME_PAPER_FEED] = &test::test_paper_feed; - test_map_[HGPDTTOOLDB_NAME_SCANNING_SENSOR] = &test::test_scanning_sensor; - test_map_[HGPDTTOOLDB_NAME_CONFIGURE_SPEED_MODE] = &test::test_configure_speed_mode; - test_map_[HGPDTTOOLDB_NAME_PLACE_CORRECTION_PAPER] = &test::test_place_correction_paper; - test_map_[HGPDTTOOLDB_NAME_AUTO_FLAT_FIELD] = &test::test_auto_flat_field; - test_map_[HGPDTTOOLDB_NAME_REBOOT_DEVICE] = &test::test_reboot_device; - - test_map_[HGPDTTOOLDB_NAME_IMAGE_COLOR_QUALITY] = &test::test_image_color_quality; - test_map_[HGPDTTOOLDB_NAME_IMAGE_GRAY_QUALITY] = &test::test_image_gray_quality; - - test_map_[HGPDTTOOLDB_NAME_GET_DISTORTION_VAL] = &test::test_get_auto_distortion; - test_map_[HGPDTTOOLDB_NAME_SET_DISTORTION_VAL] = &test::test_set_auto_distortion; - test_map_[HGPDTTOOLDB_NAME_CONFIRM_DISTORTION_VAL] = &test::test_confirm_auto_distortion; - test_map_[HGPDTTOOLDB_NAME_DORMANCY] = &test::test_dormancy; - test_map_[HGPDTTOOLDB_NAME_PAPER_SEPARATION_STRENGTH] = &test::test_paper_separation_strength; - test_map_[HGPDTTOOLDB_NAME_MECH_PAPER_FEEDING_INCLINATION] = &test::test_mech_paper_feeding_inclination; - test_map_[HGPDTTOOLDB_NAME_CLEAR_ROLLER_COUNT] = &test::test_clear_roller_count; - test_map_[HGPDTTOOLDB_NAME_CLEAR_HISTORY_COUNT] = &test::test_clear_history_count; - - test_map_[HGPDTTOOLDB_NAME_COVER_SENSOR] = &test::test_single_page_test; - test_map_[HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST] = &test::test_single_page_test; - test_map_[HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY] = &test::test_single_page_test; - test_map_[HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY] = &test::test_single_page_test; - test_map_[HGPDTTOOLDB_NAME_CLARITY_QUALITY] = &test::test_single_page_test; - - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_200DPI] = &test::test_pressuer_test_rgb_200dpi; - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_200DPI] = &test::test_pressuer_test_gray_200dpi; - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_300DPI] = &test::test_pressuer_test_rgb_300dpi; - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_300DPI] = &test::test_pressuer_test_gray_300dpi; - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_RGB_600DPI] = &test::test_pressuer_test_rgb_600dpi; - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST_GRAY_600DPI] = &test::test_pressuer_test_gray_600dpi; - test_map_[HGPDTTOOLDB_NAME_GET_DEVICE_CONFIG] = &test::test_get_device_config; - test_map_[HGPDTTOOLDB_NAME_GET_DEVICE_CPU_DISK] = &test::test_get_device_cpu_disk; - test_map_[HGPDTTOOLDB_NAME_BACKUP] = &test::test_backup; - test_map_[HGPDTTOOLDB_NAME_SHUTDOWN] = &test::test_shutdown; - test_map_[HGPDTTOOLDB_NAME_SET_FIRMWARE_LANGUAGE] = &test::test_set_firmware_language; - test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI] = &test::test_image_correct_rgb_200dpi; - test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_200DPI] = &test::test_image_correct_gray_200dpi; - test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_300DPI] = &test::test_image_correct_rgb_300dpi; - test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_300DPI] = &test::test_image_correct_gray_300dpi; - test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_600DPI] = &test::test_image_correct_rgb_600dpi; - test_map_[HGPDTTOOLDB_NAME_IMAGE_CORRECTION_GRAY_600DPI] = &test::test_image_correct_gray_600dpi; + std::string fw1(get_firmware_version()); + if (!fw1.empty()) + { + if ("G1" == fw1.substr(0, 2)) + fw_ = 1; + else if ("G2" == fw1.substr(0, 2)) + fw_ = 2; + else if ("G3" == fw1.substr(0, 2)) + fw_ = 3; + else if ("G4" == fw1.substr(0, 2)) + fw_ = 4; + } } - int set_test(const wchar_t* name,const wchar_t* oper) + if (!name) + return SCANNER_ERR_NO_DATA; + set_test_name_ = name; + int ret = SCANNER_ERR_OK; + + auto it = test_map_.find(name); + + if (it == test_map_.end()) { - - if (wcscmp(name, HGPDTTOOLDB_NAME_SET_JSON_SN) == 0 - || wcscmp(name, HGPDTTOOLDB_NAME_GET_DEVICE_CONFIG) == 0 - || wcscmp(name, HGPDTTOOLDB_NAME_CONFIGURE_SPEED_MODE) == 0 - || wcscmp(name, WRITE_CFG_NAME) == 0) - { - std::string fw1(get_firmware_version()); - if (!fw1.empty()) - { - if ("G1" == fw1.substr(0, 2)) - fw_ = 1; - else if ("G2" == fw1.substr(0, 2)) - fw_ = 2; - else if ("G3" == fw1.substr(0, 2)) - fw_ = 3; - else if ("G4" == fw1.substr(0, 2)) - fw_ = 4; - } - } - if (!name) - return SCANNER_ERR_NO_DATA; - set_test_name_ = name; - int ret = SCANNER_ERR_OK; - - auto it = test_map_.find(name); - - if (it == test_map_.end()) - { - helper_->test_callback(name, ui_helper::TEST_EVENT_NOT_FIND_TEST, NULL, false); - return ret; - } - ret = (this->*test_map_[name])((void*)oper); - - const wchar_t* info = NULL; - if (ret == SCANNER_ERR_DEVICE_NOT_SUPPORT - || ret == SCANNER_ERR_IO - || ret == SCANNER_ERR_TIMEOUT - || ret == SCANNER_ERR_NO_DATA - ) - { - if (ret == SCANNER_ERR_DEVICE_NOT_SUPPORT) - info = L"设备不支持该操作"; - else if (ret == SCANNER_ERR_IO) - info = L"IO错误"; - else if (ret == SCANNER_ERR_TIMEOUT) - info = L"超时错误"; - else if (ret == SCANNER_ERR_NO_DATA) - info = L"没有数据"; - - helper_->test_callback(name, ui_helper::TEST_EVENT_IO_FAIL, (void*)info, ret); - } + helper_->test_callback(name, ui_helper::TEST_EVENT_NOT_FIND_TEST, NULL, false); return ret; } -public: + ret = (this->*test_map_[name])((void*)oper); - int set_init_cfg(void *data) + const wchar_t* info = NULL; + if (ret == SCANNER_ERR_DEVICE_NOT_SUPPORT + || ret == SCANNER_ERR_IO + || ret == SCANNER_ERR_TIMEOUT + || ret == SCANNER_ERR_NO_DATA + ) { - const wchar_t* p = (const wchar_t*)data; - LPWRITECFG cfg = (LPWRITECFG)p; - unsigned int len = 0; - int ret = SCANNER_ERR_OK; - switch (cfg->cat) - { - case WRITE_CAT_VID_PID: - ret = test_set_vidpid(cfg->val); - break; - case WRITE_CAT_SPEED: - ret = test_configure_speed_mode(cfg->val); - break; - case WRITE_CAT_SLEEP: - ret = test_dormancy(cfg->val); - break; - case WRITE_CAT_SERIALNUM: - ret = test_set_serial_num(cfg->val); - break; - case WRITE_CAT_DEVS_MODEL: - ret = test_set_devs_model (cfg->val); - break; - default: - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"协议未找到", false); - break; - } - return ret; + if (ret == SCANNER_ERR_DEVICE_NOT_SUPPORT) + info = L"设备不支持该操作"; + else if (ret == SCANNER_ERR_IO) + info = L"IO错误"; + else if (ret == SCANNER_ERR_TIMEOUT) + info = L"超时错误"; + else if (ret == SCANNER_ERR_NO_DATA) + info = L"没有数据"; + + helper_->test_callback(name, ui_helper::TEST_EVENT_IO_FAIL, (void*)info, ret); } + return ret; +} - /*设置序列号*/ - int test_set_json_serial_num(void* data) +void test::thread_dynamic_correct(std::string correctData) +{ + std::unique_lock lock(m_lock); + while (g_currentCorrectType <= 6) { - int ret = SCANNER_ERR_OK, - val = 0; - wchar_t* sn; + if (g_currentCorrectType > 1) + m_waitCorrect.wait(lock); - std::string set_sn,get_sn; - size_t len = 0; - parameter* prt = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_FLOAT, set_test_name_.c_str(), L"请设置序列号"); - if (!prt) + if (g_dynamicCorrectStatus == SCANNER_ERR_IMAGE_CORRECTION_FAIL) + break; + + CorrectMode correctMode = m_correctModeMap.at(g_currentCorrectType); + int dpi = correctMode.dpi; + bool isColor = correctMode.isColor; + int ret = public_test_image_correct(correctData, dpi, isColor); + g_currentCorrectType++; + } +} + +int test::set_init_cfg(void* data) +{ + const wchar_t* p = (const wchar_t*)data; + LPWRITECFG cfg = (LPWRITECFG)p; + unsigned int len = 0; + int ret = SCANNER_ERR_OK; + switch (cfg->cat) + { + case WRITE_CAT_VID_PID: + ret = test_set_vidpid(cfg->val); + break; + case WRITE_CAT_SPEED: + ret = test_configure_speed_mode(cfg->val); + break; + case WRITE_CAT_SLEEP: + ret = test_dormancy(cfg->val); + break; + case WRITE_CAT_SERIALNUM: + ret = test_set_serial_num(cfg->val); + break; + case WRITE_CAT_DEVS_MODEL: + ret = test_set_devs_model(cfg->val); + break; + default: + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"协议未找到", false); + break; + } + return ret; +} + +/*设置序列号*/ +int test::test_set_json_serial_num(void* data) +{ + int ret = SCANNER_ERR_OK, + val = 0; + wchar_t* sn; + + std::string set_sn, get_sn; + size_t len = 0; + parameter* prt = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_FLOAT, set_test_name_.c_str(), L"请设置序列号"); + if (!prt) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出序列号设置", false); + return -1; + } + else + { + sn = (wchar_t*)prt->get_data(); + if (!sn) { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出序列号设置", false); + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号失败", false); return -1; } - else + } + std::string fv(get_firmware_version()); + if (fv.empty()) + { + return -1; + } + std::string fvv = fv.substr(0, 4); + if (fvv != "G439" && fvv != "G239" && fvv != "G139") + { + fvv = fv.substr(0, 2); + } + + ret = wchar_to_char(set_sn, sn, &len); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + if (fvv == "G3" || fvv == "G4") { - sn = (wchar_t*)prt->get_data(); - if (!sn) + if (len != 14) { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号失败", false); + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号不足:14位", false); return -1; } - } - std::string fv(get_firmware_version()); - if (fv.empty()) - { - return -1; - } - std::string fvv = fv.substr(0, 4); - if (fvv != "G439" && fvv != "G239" && fvv != "G139") - { - fvv = fv.substr(0, 2); - } + } + set_sn.resize(len); ret = wchar_to_char(set_sn, sn, &len); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - if (fvv == "G3" || fvv == "G4") - { - if (len != 14) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号不足:14位", false); - return -1; - } + } + unsigned int setlen = set_sn.size(), + getlen = 0; - } - set_sn.resize(len); - ret = wchar_to_char(set_sn, sn, &len); - } - unsigned int setlen = set_sn.size(), - getlen = 0; + ret = helper_->io_control(IO_CTRL_CODE_SET_SERIAL, &set_sn[0], &setlen); - ret = helper_->io_control(IO_CTRL_CODE_SET_SERIAL, &set_sn[0], &setlen); - - if (ret != SCANNER_ERR_OK)return ret; + if (ret != SCANNER_ERR_OK)return ret; + ret = helper_->io_control(IO_CTRL_CODE_GET_SERIAL, &get_sn[0], &getlen); + if (ret == SANE_STATUS_NO_MEM) + { ret = helper_->io_control(IO_CTRL_CODE_GET_SERIAL, &get_sn[0], &getlen); - if (ret == SANE_STATUS_NO_MEM) - { - ret = helper_->io_control(IO_CTRL_CODE_GET_SERIAL, &get_sn[0], &getlen); - } - - if (set_sn == get_sn) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号完成", true); - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号失败", true); + } - } - + if (set_sn == get_sn) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号完成", true); + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置序列号失败", true); + } + + + return ret; +} +/* 清理纸道功能确认 */ +int test::tset_clear_paper_path(void* data) +{ + int ret = helper_->io_control(IO_CTRL_CODE_GET_CLEAN_PAPER_ROAD, NULL, NULL); + if (ret != SCANNER_ERR_OK) + { return ret; } - /* 清理纸道功能确认 */ - int tset_clear_paper_path(void *data) - { - int ret = helper_->io_control(IO_CTRL_CODE_GET_CLEAN_PAPER_ROAD, NULL, NULL); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"请确认是否清理纸道成功", true); - return ret; - } - /* 按键功能检测 */ - int test_key_funtion(void *data) - { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; - } - /* 计数模式检测 */ - int test_count_mode(void *data) - { - SANE_Bool ismode = false; - unsigned int len = sizeof(SANE_Bool); + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"请确认是否清理纸道成功", true); + return ret; +} +/* 按键功能检测 */ +int test::test_key_funtion(void* data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* 计数模式检测 */ +int test::test_count_mode(void* data) +{ + SANE_Bool ismode = false; + unsigned int len = sizeof(SANE_Bool); - int ret = helper_->io_control(IO_CTRL_CODE_GET_IS_MODE, &ismode, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"请确认与液晶面板是否匹配", ismode); + int ret = helper_->io_control(IO_CTRL_CODE_GET_IS_MODE, &ismode, &len); + if (ret != SCANNER_ERR_OK) + { return ret; } - /* 歪斜检测 */ - int test_skew_detection(void *data) + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"请确认与液晶面板是否匹配", ismode); + return ret; +} +/* 歪斜检测 */ +int test::test_skew_detection(void* data) +{ + const wchar_t* NAME = set_test_name_.c_str(); + SANE_Bool type = true; + unsigned int len = sizeof(SANE_Bool); + int num = 0; + void* get_data = NULL; + parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_INT, NAME, L"请歪斜放纸...设置阈值:0 - 5,值越小越容易检测,0为关闭歪斜检测"); + if (ptr) { - const wchar_t* NAME = set_test_name_.c_str(); - SANE_Bool type = true; - unsigned int len = sizeof(SANE_Bool); - int num = 0; - void* get_data = NULL; - parameter * ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_INT, NAME,L"请歪斜放纸...设置阈值:0 - 5,值越小越容易检测,0为关闭歪斜检测"); - if (ptr) - { - get_data = ptr->get_data(); - if (!get_data) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出歪斜检测流程", false); - return -1; - } - num = *((int*)get_data); - } - else + get_data = ptr->get_data(); + if (!get_data) { helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出歪斜检测流程", false); return -1; } - type = num == 0 ? false:true; - ptr->release(); - int ret = helper_->io_control(IO_CTRL_CODE_SET_SKEW_CHECK, &type, &len); - if (ret != SCANNER_ERR_OK) - return ret; + num = *((int*)get_data); + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出歪斜检测流程", false); + return -1; + } + type = num == 0 ? false : true; + ptr->release(); + int ret = helper_->io_control(IO_CTRL_CODE_SET_SKEW_CHECK, &type, &len); + if (ret != SCANNER_ERR_OK) + return ret; - ret = helper_->io_control(IO_CTRL_CODE_SET_SKEW_CHECK_VAL, &num, &len); - if (ret != SCANNER_ERR_OK) - return ret; + ret = helper_->io_control(IO_CTRL_CODE_SET_SKEW_CHECK_VAL, &num, &len); + if (ret != SCANNER_ERR_OK) + return ret; - ret = helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); + ret = helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); + return ret; +} +/* 分纸电机检测 */ +int test::test_separater_motor(void* data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* cis原图初检 */ +int test::test_cis__original_image(void* data) +{ + const wchar_t* NAME = set_test_name_.c_str(); + SANE_Bool type = true; + unsigned int len = sizeof(SANE_Bool); + int ret = SCANNER_ERR_OK; + + ret = helper_->io_control(IO_CTRL_CODE_SET_CIS_IMAGE, &type, &len); + if (ret != SCANNER_ERR_OK) + { return ret; } - /* 分纸电机检测 */ - int test_separater_motor(void *data) + ret = helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); + if (ret != SCANNER_ERR_OK) { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; - } - /* cis原图初检 */ - int test_cis__original_image(void *data) - { - const wchar_t* NAME = set_test_name_.c_str(); - SANE_Bool type = true; - unsigned int len = sizeof(SANE_Bool); - int ret = SCANNER_ERR_OK; - - ret = helper_->io_control(IO_CTRL_CODE_SET_CIS_IMAGE, &type, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - ret = helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - if (ret != SCANNER_ERR_OK) - { - return ret; - } return ret; } - /* 主机风扇功能检测 */ - int test_host_fan(void *data) + return ret; +} +/* 主机风扇功能检测 */ +int test::test_host_fan(void* data) +{ + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* 扫描工作状态 */ +int test::test_scan_work_status(void* data) +{ + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* USB-PC接口 */ +int test::test_usb_pc_interface(void* data) +{ + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* 超声波模块检验 */ +int test::test_ultrasonic_module(void* data) +{ + const wchar_t* NAME = set_test_name_.c_str(); + SANE_Bool type = true; + unsigned int len = sizeof(SANE_Bool); + void* get_data = NULL; + int ret = SCANNER_ERR_OK; + parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_BOOL, NAME, + L"请选择是否开启超声波检查,并且请放置双张纸"); + if (ptr) { - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /* 扫描工作状态 */ - int test_scan_work_status(void* data) - { - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /* USB-PC接口 */ - int test_usb_pc_interface(void* data) - { - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /* 超声波模块检验 */ - int test_ultrasonic_module(void *data) - { - const wchar_t* NAME = set_test_name_.c_str(); - SANE_Bool type = true; - unsigned int len = sizeof(SANE_Bool); - void* get_data = NULL; - int ret = SCANNER_ERR_OK; - parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_BOOL, NAME, - L"请选择是否开启超声波检查,并且请放置双张纸"); - if (ptr) - { - get_data = ptr->get_data(); - if (!get_data) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出超声波模块检测流程", false); - return -1; - } - else - type = *((bool*)get_data); - } - else + get_data = ptr->get_data(); + if (!get_data) { helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出超声波模块检测流程", false); return -1; } - ptr->release(); + else + type = *((bool*)get_data); + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出超声波模块检测流程", false); + return -1; + } + ptr->release(); - ret = helper_->io_control(IO_CTRL_CODE_SET_ULTRASONIC_MODULE, &type, &len); + ret = helper_->io_control(IO_CTRL_CODE_SET_ULTRASONIC_MODULE, &type, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - ret = helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); + if (ret != SCANNER_ERR_OK) + { return ret; } - /* led灯状态检查 */ - int test_led_light(void *data) - { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; - } - /* 复位检查 */ - int test_reset(void *data) - { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; - } - /* 走纸检查 */ - int test_paper_feed(void *data) //使用单张扫描测试 - { - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /* 扫描传感器检查 */ - int test_scanning_sensor(void *data) - { - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /* 放置校正纸 */ - int test_place_correction_paper(void *data) - { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; - } - /* 自动平场校正 */ - int test_auto_flat_field(void *data) - { - if (!data) - return SCANNER_ERR_DATA_DAMAGED; - unsigned int len = sizeof(int); - wchar_t* p = (wchar_t*)data; - std::string str; + ret = helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); + return ret; +} +/* led灯状态检查 */ +int test::test_led_light(void* data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* 复位检查 */ +int test::test_reset(void* data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* 走纸检查 */ +int test::test_paper_feed(void* data) //使用单张扫描测试 +{ + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* 扫描传感器检查 */ +int test::test_scanning_sensor(void* data) +{ + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* 放置校正纸 */ +int test::test_place_correction_paper(void* data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* 自动平场校正 */ +int test::test_auto_flat_field(void* data) +{ + if (!data) + return SCANNER_ERR_DATA_DAMAGED; + unsigned int len = sizeof(int); + wchar_t* p = (wchar_t*)data; + std::string str; - int ret = SCANNER_ERR_OK, - dpi_type = 0; - unsigned int llen = sizeof(int); - size_t strl = 0; - //ret = wchar_to_char(str, p, &strl); - //if (ret == ERROR_INSUFFICIENT_BUFFER) - //{ - // str.resize(strl); - // ret = wchar_to_char(str, p, &strl); - // if (str.empty()) - // { - // return SCANNER_ERR_DATA_DAMAGED; - // } - // dpi_type = atoi(str.c_str()); - //} - return helper_->io_control(IO_CTRL_CODE_SET_AUTO_FALT, &dpi_type, &len);; - } - /* 重启设备 */ - int test_reboot_device(void *data) + int ret = SCANNER_ERR_OK, + dpi_type = 0; + unsigned int llen = sizeof(int); + size_t strl = 0; + //ret = wchar_to_char(str, p, &strl); + //if (ret == ERROR_INSUFFICIENT_BUFFER) + //{ + // str.resize(strl); + // ret = wchar_to_char(str, p, &strl); + // if (str.empty()) + // { + // return SCANNER_ERR_DATA_DAMAGED; + // } + // dpi_type = atoi(str.c_str()); + //} + return helper_->io_control(IO_CTRL_CODE_SET_AUTO_FALT, &dpi_type, &len);; +} +/* 重启设备 */ +int test::test_reboot_device(void* data) +{ + if (!data) { - if (!data) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设备重启中失败", false); - return -1; - } - wchar_t* p = (wchar_t*)data; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设备重启中失败", false); + return -1; + } + wchar_t* p = (wchar_t*)data; - int i = _wtoi(p); - unsigned int len = sizeof(int); - int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_REBOOT, &i, &len); - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设备重启中,请观察设备是否重启", true); - return ret; - } - /* 扫描图像彩色质量确认 */ - int test_image_color_quality(void *data) + int i = _wtoi(p); + unsigned int len = sizeof(int); + int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_REBOOT, &i, &len); + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设备重启中,请观察设备是否重启", true); + return ret; +} +/* 扫描图像彩色质量确认 */ +int test::test_image_color_quality(void* data) +{ + if (!data) { - if (!data) - { - return SCANNER_ERR_DATA_DAMAGED; - } - wchar_t* p = (wchar_t*)data; - std::string str; - int ret = SCANNER_ERR_OK, - dpi = 0; - unsigned int len = sizeof(int); - size_t strl = 0; + return SCANNER_ERR_DATA_DAMAGED; + } + wchar_t* p = (wchar_t*)data; + std::string str; + int ret = SCANNER_ERR_OK, + dpi = 0; + unsigned int len = sizeof(int); + size_t strl = 0; + ret = wchar_to_char(str, p, &strl); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(strl); ret = wchar_to_char(str, p, &strl); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - str.resize(strl); - ret = wchar_to_char(str, p, &strl); - if (str.empty()) - { - return SCANNER_ERR_DATA_DAMAGED; - } - dpi = atoi(str.c_str()); - } - if (dpi > 0) - { - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); - } - if (ret != SCANNER_ERR_OK) - { - return -1; - } - const char* color = OPTION_VALUE_YSMS_24WCS; - unsigned int colorlen = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); - - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /* 扫描图像灰度质量确认 */ - int test_image_gray_quality(void* data) - { - if (!data) + if (str.empty()) { return SCANNER_ERR_DATA_DAMAGED; } - wchar_t* p = (wchar_t*)data; - std::string str; - int ret = SCANNER_ERR_OK, - dpi = 0; - unsigned int len = sizeof(int); - size_t strl = 0; - ret = wchar_to_char(str, p, &strl); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - str.resize(strl); - ret = wchar_to_char(str, p, &strl); - if (str.empty()) - { - return SCANNER_ERR_DATA_DAMAGED; - } - dpi = atoi(str.c_str()); - } - if (dpi > 0) - { - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); - } - if (ret != SCANNER_ERR_OK) - { - return -1; - } - const char* color = OPTION_VALUE_YSMS_256JHD; - unsigned int colorlen = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); + dpi = atoi(str.c_str()); } - /* 获取自动计算畸变值 */ - int test_get_auto_distortion(void *data) + if (dpi > 0) { - if (!data ) + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); + } + if (ret != SCANNER_ERR_OK) + { + return -1; + } + const char* color = OPTION_VALUE_YSMS_24WCS; + unsigned int colorlen = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); + + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* 扫描图像灰度质量确认 */ +int test::test_image_gray_quality(void* data) +{ + if (!data) + { + return SCANNER_ERR_DATA_DAMAGED; + } + wchar_t* p = (wchar_t*)data; + std::string str; + int ret = SCANNER_ERR_OK, + dpi = 0; + unsigned int len = sizeof(int); + size_t strl = 0; + ret = wchar_to_char(str, p, &strl); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(strl); + ret = wchar_to_char(str, p, &strl); + if (str.empty()) { return SCANNER_ERR_DATA_DAMAGED; } - wchar_t* p = (wchar_t*)data; - std::string str; - - int ret = SCANNER_ERR_OK, - dpi = 0; - SANE_Bool type = true; - unsigned int len = sizeof(SANE_Bool), - llen = sizeof(int); - size_t strl = 0; + dpi = atoi(str.c_str()); + } + if (dpi > 0) + { + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); + } + if (ret != SCANNER_ERR_OK) + { + return -1; + } + const char* color = OPTION_VALUE_YSMS_256JHD; + unsigned int colorlen = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/* 获取自动计算畸变值 */ +int test::test_get_auto_distortion(void* data) +{ + if (!data) + { + return SCANNER_ERR_DATA_DAMAGED; + } + wchar_t* p = (wchar_t*)data; + std::string str; + + int ret = SCANNER_ERR_OK, + dpi = 0; + SANE_Bool type = true; + unsigned int len = sizeof(SANE_Bool), + llen = sizeof(int); + size_t strl = 0; + ret = wchar_to_char(str, p, &strl); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(strl); ret = wchar_to_char(str, p, &strl); - if (ret == ERROR_INSUFFICIENT_BUFFER) + if (str.empty()) { - str.resize(strl); - ret = wchar_to_char(str, p, &strl); - if (str.empty()) - { - return SCANNER_ERR_DATA_DAMAGED; - } - dpi = atoi(str.c_str()); + return SCANNER_ERR_DATA_DAMAGED; } + dpi = atoi(str.c_str()); + } - ret = helper_->io_control(IO_CTRL_CODE_GET_PAPER_ON, &type, &llen); - if (!type) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"自动计算畸变值获取失败: 无纸", false); - return ret; - } - - if (dpi > 0) - { - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &llen); - } - //先默认设置1 - float distortion = 1.0; - - ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_DEVS_CHECK_VAL, &distortion, &len); - - ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_IMAGE, &type, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - int cnt = 0; - SANE_DISTORTION_VAL dis = { 0 }; - while (ret == SCANNER_ERR_OK) - { - if (is_distortion_get_image) - { - ret = helper_->io_control(IO_CTRL_CODE_GET_PC_DISTORTION_CHECK_VAL, &dis, &llen); - break; - } - else if (cnt == 20) - break; - - if (is_distortion_get_image_abnormal) - break; - - Sleep(1000); - cnt++; - } - if (dis.h > 0 && dis.scaleXY < 10) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_DISTORTION_VAL, (void *)&dis, true); - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT,(void*)L"自动计算畸变值获取失败", false); - } + ret = helper_->io_control(IO_CTRL_CODE_GET_PAPER_ON, &type, &llen); + if (!type) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"自动计算畸变值获取失败: 无纸", false); return ret; } - int test_set_auto_distortion(void* data) + + if (dpi > 0) { - if (!data) + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &llen); + } + //先默认设置1 + float distortion = 1.0; + + ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_DEVS_CHECK_VAL, &distortion, &len); + + ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_IMAGE, &type, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + int cnt = 0; + SANE_DISTORTION_VAL dis = { 0 }; + while (ret == SCANNER_ERR_OK) + { + if (is_distortion_get_image) + { + ret = helper_->io_control(IO_CTRL_CODE_GET_PC_DISTORTION_CHECK_VAL, &dis, &llen); + break; + } + else if (cnt == 20) + break; + + if (is_distortion_get_image_abnormal) + break; + + Sleep(1000); + cnt++; + } + if (dis.h > 0 && dis.scaleXY < 10) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_DISTORTION_VAL, (void*)&dis, true); + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"自动计算畸变值获取失败", false); + } + return ret; +} +int test::test_set_auto_distortion(void* data) +{ + if (!data) + { + return SCANNER_ERR_DATA_DAMAGED; + } + wchar_t* p = (wchar_t*)data; + std::string str; + + int ret = SCANNER_ERR_OK, + dpi = 0; + unsigned int len = sizeof(int); + float distortion = 0.0; + size_t strl = 0; + + ret = wchar_to_char(str, p, &strl); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(strl); + ret = wchar_to_char(str, p, &strl); + if (str.empty()) { return SCANNER_ERR_DATA_DAMAGED; } - wchar_t* p = (wchar_t*)data; - std::string str; + dpi = atoi(str.c_str()); + } + if (dpi > 0) + { + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); + } - int ret = SCANNER_ERR_OK, - dpi = 0; - unsigned int len = sizeof(int); - float distortion = 0.0; - size_t strl = 0; + parameter* prt = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_FLOAT, set_test_name_.c_str(), L"请设置畸变值"); + if (!prt) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出畸变值设置", false); + return -1; + } + else + { - ret = wchar_to_char(str, p, &strl); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - str.resize(strl); - ret = wchar_to_char(str, p, &strl); - if (str.empty()) - { - return SCANNER_ERR_DATA_DAMAGED; - } - dpi = atoi(str.c_str()); - } - if (dpi > 0) - { - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi, &len); - } + void* p = prt->get_data(); + distortion = *(float*)p; + } + if (distortion == 0.0) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出畸变值设置", false); + return -1; + } + float setdistortion = distortion; + float getdistortion = 0; - parameter* prt = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_FLOAT, set_test_name_.c_str(), L"请设置畸变值"); - if (!prt) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出畸变值设置", false); - return -1; - } - else - { - - void * p = prt->get_data(); - distortion = *(float*)p; - } - if (distortion == 0.0) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void *)L"已退出畸变值设置", false); - return -1; - } - float setdistortion = distortion; - float getdistortion = 0; - - ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_DEVS_CHECK_VAL, &setdistortion, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - - ret = helper_->io_control(IO_CTRL_CODE_GET_DISTORTION_DEVS_CHECK_VAL, &getdistortion, &len); - if (setdistortion == getdistortion) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置畸变值成功", true); - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置畸变值失败", false); - } - + ret = helper_->io_control(IO_CTRL_CODE_SET_DISTORTION_DEVS_CHECK_VAL, &setdistortion, &len); + if (ret != SCANNER_ERR_OK) + { return ret; } - int test_confirm_auto_distortion(void *data) - { - if (!data ) - { - return SCANNER_ERR_DATA_DAMAGED; - } - float distortion = 0; - unsigned int len = sizeof(int); - - int ret = SCANNER_ERR_OK; - float value[3] = { 0 }; - int dpi[3] = { 200, 300, 600 }; - for (int i = 0; i < 3; i++) - { - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi[i], &len); - ret = helper_->io_control(IO_CTRL_CODE_GET_DISTORTION_DEVS_CHECK_VAL, &distortion, &len); - if (ret != SCANNER_ERR_OK) - break; - - value[i] = distortion; - } - - if (ret == SCANNER_ERR_OK) - { - - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(float*)value, true); - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT,(void*)L"获取设备畸变值失败", false); - } - return ret; - } - /* 分纸强度检测 */ - int test_paper_separation_strength(void *data) + ret = helper_->io_control(IO_CTRL_CODE_GET_DISTORTION_DEVS_CHECK_VAL, &getdistortion, &len); + if (setdistortion == getdistortion) { - //parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_TIPS_VAL, NAME, (wchar_t*)&info_); - return SCANNER_ERR_DEVICE_NOT_SUPPORT; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置畸变值成功", true); } - /* 机械走纸倾斜检测 */ - int test_mech_paper_feeding_inclination(void *data) + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置畸变值失败", false); + } + + return ret; +} +int test::test_confirm_auto_distortion(void* data) +{ + if (!data) + { + return SCANNER_ERR_DATA_DAMAGED; + } + + float distortion = 0; + unsigned int len = sizeof(int); + + int ret = SCANNER_ERR_OK; + float value[3] = { 0 }; + int dpi[3] = { 200, 300, 600 }; + for (int i = 0; i < 3; i++) + { + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, &dpi[i], &len); + ret = helper_->io_control(IO_CTRL_CODE_GET_DISTORTION_DEVS_CHECK_VAL, &distortion, &len); + if (ret != SCANNER_ERR_OK) + break; + + value[i] = distortion; + } + + if (ret == SCANNER_ERR_OK) + { + + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(float*)value, true); + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"获取设备畸变值失败", false); + } + return ret; +} +/* 分纸强度检测 */ +int test::test_paper_separation_strength(void* data) +{ + //parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_TIPS_VAL, NAME, (wchar_t*)&info_); + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* 机械走纸倾斜检测 */ +int test::test_mech_paper_feeding_inclination(void* data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +/* 清除滚轴计数 */ +int test::test_clear_roller_count(void* data) +{ + SANE_Int roller_num = -1; + const wchar_t* info = NULL; + bool type = false; + unsigned int len = sizeof(SANE_Int); + int ret = helper_->io_control(IO_CTRL_CODE_SET_CLEAR_ROLLER_COUNT, NULL, NULL); + ret = helper_->io_control(IO_CTRL_CODE_GET_ROLLER_NUM, &roller_num, &len); + + if ((roller_num == 0 && roller_num != -1)) + { + type = true; + info = L"清除滚轴计数成功"; + } + else + { + type = false; + info = L"清除滚轴计数失败"; + } + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)info, type); + + return ret; +} +/* 清除历史计数 */ +int test::test_clear_history_count(void* data) +{ + SANE_Int num = -1; + const wchar_t* info = NULL; + bool type = false; + unsigned int len = sizeof(SANE_Int); + int ret = helper_->io_control(IO_CTRL_CODE_SET_CLEAR_HISTORY_COUNT, NULL, NULL); + if (ret != SCANNER_ERR_OK) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } - /* 清除滚轴计数 */ - int test_clear_roller_count(void *data) - { - SANE_Int roller_num = -1; - const wchar_t* info = NULL; - bool type = false; - unsigned int len = sizeof(SANE_Int); - int ret = helper_->io_control(IO_CTRL_CODE_SET_CLEAR_ROLLER_COUNT, NULL, NULL); - ret = helper_->io_control(IO_CTRL_CODE_GET_ROLLER_NUM, &roller_num, &len); + ret = helper_->io_control(IO_CTRL_CODE_GET_HISTORY_SCAN_NUM, &num, &len); - if ((roller_num == 0 && roller_num != -1)) - { - type = true; - info = L"清除滚轴计数成功"; - } - else - { - type = false; - info = L"清除滚轴计数失败"; - } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)info, type); + if ((num == 0 && num != -1)) + { + type = true; + info = L"清除历史计数成功"; + } + else + { + type = false; + info = L"清除历史计数失败"; + } + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)info, type); - return ret; - } - /* 清除历史计数 */ - int test_clear_history_count(void* data) - { - SANE_Int num = -1; - const wchar_t* info = NULL; - bool type = false; - unsigned int len = sizeof(SANE_Int); - int ret = helper_->io_control(IO_CTRL_CODE_SET_CLEAR_HISTORY_COUNT, NULL, NULL); - if (ret != SCANNER_ERR_OK) - { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; - } - ret = helper_->io_control(IO_CTRL_CODE_GET_HISTORY_SCAN_NUM, &num, &len); + return ret; +} +/* 单张测试 */ +int test::test_single_page_test(void* data) +{ + return helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); +} +/*压力测试彩色_200dpi*/ +int test::test_pressuer_test_rgb_200dpi(void* data) +{ + const char* color = OPTION_VALUE_YSMS_24WCS; + int dpi = 200; + unsigned int len = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); + helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/*压力测试灰色_200dpi*/ +int test::test_pressuer_test_gray_200dpi(void* data) +{ + const char* color = OPTION_VALUE_YSMS_256JHD; + int dpi = 200; + unsigned int len = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); + helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/*压力测试彩色_300dpi*/ +int test::test_pressuer_test_rgb_300dpi(void* data) +{ + const char* color = OPTION_VALUE_YSMS_24WCS; + int dpi = 300; + unsigned int len = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); + helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/*压力测试灰色_300dpi*/ +int test::test_pressuer_test_gray_300dpi(void* data) +{ + const char* color = OPTION_VALUE_YSMS_256JHD; + int dpi = 300; + unsigned int len = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); + helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/*压力测试彩色_600dpi*/ +int test::test_pressuer_test_rgb_600dpi(void* data) +{ + const char* color = OPTION_VALUE_YSMS_24WCS; + int dpi = 600; + unsigned int len = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); + helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/*压力测试灰色_600dpi*/ +int test::test_pressuer_test_gray_600dpi(void* data) +{ + const char* color = OPTION_VALUE_YSMS_256JHD; + int dpi = 600; + unsigned int len = strlen(color); + helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); + helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); + return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); +} +/*获取设备配置*/ +int test::test_get_device_config(void* data) +{ + unsigned int len = sizeof(int); + unsigned int getlen = 0; - if ((num == 0 && num != -1)) - { - type = true; - info = L"清除历史计数成功"; - } - else - { - type = false; - info = L"清除历史计数失败"; - } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)info, type); + int get_vidpid = 0, + ret = SCANNER_ERR_OK; - return ret; - } - /* 单张测试 */ - int test_single_page_test(void* data) + if (ret == SCANNER_ERR_OK) { - return helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); + ret = helper_->io_control(IO_CTRL_CODE_GET_VIDPID, &get_vidpid, &len); + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_VIDPID, &get_vidpid, true); } - /*压力测试彩色_200dpi*/ - int test_pressuer_test_rgb_200dpi(void* data) - { - const char* color = OPTION_VALUE_YSMS_24WCS; - int dpi = 200; - unsigned int len = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void *)color, &len); - helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /*压力测试灰色_200dpi*/ - int test_pressuer_test_gray_200dpi(void* data) - { - const char* color = OPTION_VALUE_YSMS_256JHD; - int dpi = 200; - unsigned int len = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); - helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /*压力测试彩色_300dpi*/ - int test_pressuer_test_rgb_300dpi(void* data) - { - const char* color = OPTION_VALUE_YSMS_24WCS; - int dpi = 300; - unsigned int len = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); - helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /*压力测试灰色_300dpi*/ - int test_pressuer_test_gray_300dpi(void* data) - { - const char* color = OPTION_VALUE_YSMS_256JHD; - int dpi = 300; - unsigned int len = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); - helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /*压力测试彩色_600dpi*/ - int test_pressuer_test_rgb_600dpi(void* data) - { - const char* color = OPTION_VALUE_YSMS_24WCS; - int dpi = 600; - unsigned int len = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); - helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /*压力测试灰色_600dpi*/ - int test_pressuer_test_gray_600dpi(void* data) - { - const char* color = OPTION_VALUE_YSMS_256JHD; - int dpi = 600; - unsigned int len = strlen(color); - helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &len); - helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &len); - return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - } - /*获取设备配置*/ - int test_get_device_config(void* data) - { - unsigned int len = sizeof(int); - unsigned int getlen = 0; - int get_vidpid = 0, - ret = SCANNER_ERR_OK; - - if (ret == SCANNER_ERR_OK) - { - ret = helper_->io_control(IO_CTRL_CODE_GET_VIDPID, &get_vidpid, &len); - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_VIDPID, &get_vidpid, true); - } - - std::string set_sn, get_sn; - std::wstring wstr; - size_t l = 0; + std::string set_sn, get_sn; + std::wstring wstr; + size_t l = 0; + ret = helper_->io_control(IO_CTRL_CODE_GET_SERIAL, &get_sn[0], &getlen); + if (ret == SANE_STATUS_NO_MEM) + { ret = helper_->io_control(IO_CTRL_CODE_GET_SERIAL, &get_sn[0], &getlen); - if (ret == SANE_STATUS_NO_MEM) + if (ret != SCANNER_ERR_OK) { - ret = helper_->io_control(IO_CTRL_CODE_GET_SERIAL, &get_sn[0], &getlen); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - ret = str_to_wchar(get_sn.c_str(), (wchar_t*)wstr.c_str(), &l); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - wstr.resize(l); - ret = str_to_wchar(get_sn.c_str(), (wchar_t*)wstr.c_str(), &l); - } - if (wstr.empty()) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SN, (void*)L"获取序列号失败", false); - return ret; - } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SN, (void *)wstr.c_str(), true); - } - - int gettime = 0; - unsigned int timelen = sizeof(int*); - - ret = helper_->io_control(IO_CTRL_CODE_GET_POWER_LEVEL, &gettime, &timelen); - - if (gettime == INT_MAX || gettime == -1) - gettime = 0; - else - gettime /= 60; - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SLEEPTIME, (void*)&gettime, true); - - - std::string fw(get_firmware_version()); - size_t fwlen= 0; - wstr.clear(); - ret = str_to_wchar(fw.c_str(), (wchar_t*)wstr.c_str(), &fwlen); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - wstr.resize(fwlen); - ret = str_to_wchar(fw.c_str(), (wchar_t*)wstr.c_str(), &fwlen); - } - if (wstr.empty()) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_FW, (void*)L"获取固件号失败", false); return ret; } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_FW, (void*)wstr.c_str(), true); - - - std::string fvv = fw.substr(0, 4); - if (fvv != "G439" && fvv != "G239" && fvv != "G139") - { - fvv = fw.substr(0, 2); - } - - const wchar_t G139[6] = { 60,70,80,90,110 }; - const wchar_t G239[6] = { 90,100,110,120,130 }; - const wchar_t G300[6] = { 40,50,60,70 }; - const wchar_t G400[6] = { 40,50,60,70,80 }; - SANE_Int num = 0; - unsigned int lensp = sizeof(SANE_Int); - ret = helper_->io_control(IO_CTRL_CODE_GET_SPEED_MODE, &num, &lensp); - int save_num = 0; - - if (fvv == "G3" || fvv == "G4" && num > 0 && num < 6) - { - for (size_t i = 0; i < sizeof(G400) / sizeof(G400[0]); i++)//3288设置速度模式为1 2 3 4 5 - { - if ((num - 1) == i) - { - save_num = G400[i]; - break; - } - } - } - else - save_num = num; - - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SP, (void*)&save_num, true); - - - std::string devs_model; - unsigned int devs_len = 0; - l = 0; - wstr.clear(); - - ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_MODEL, &devs_model[0], &devs_len); - if (ret == SANE_STATUS_NO_MEM) - { - devs_model.resize(devs_len); - ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_MODEL, &devs_model[0], &devs_len); - } - - ret = str_to_wchar(devs_model.c_str(), (wchar_t*)wstr.c_str(), &l); + ret = str_to_wchar(get_sn.c_str(), (wchar_t*)wstr.c_str(), &l); if (ret == ERROR_INSUFFICIENT_BUFFER) { wstr.resize(l); - ret = str_to_wchar(devs_model.c_str(), (wchar_t*)wstr.c_str(), &l); + ret = str_to_wchar(get_sn.c_str(), (wchar_t*)wstr.c_str(), &l); } - - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_DEVS_MODEL, wstr.empty() ? (void*)L"获取设备类型失败" : (void*)wstr.c_str(), wstr.empty() ? false : true); + if (wstr.empty()) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SN, (void*)L"获取序列号失败", false); + return ret; + } + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SN, (void*)wstr.c_str(), true); + } - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"配置获取完成"), true); + int gettime = 0; + unsigned int timelen = sizeof(int*); + + ret = helper_->io_control(IO_CTRL_CODE_GET_POWER_LEVEL, &gettime, &timelen); + + if (gettime == INT_MAX || gettime == -1) + gettime = 0; + else + gettime /= 60; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SLEEPTIME, (void*)&gettime, true); + + + std::string fw(get_firmware_version()); + size_t fwlen = 0; + wstr.clear(); + ret = str_to_wchar(fw.c_str(), (wchar_t*)wstr.c_str(), &fwlen); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + wstr.resize(fwlen); + ret = str_to_wchar(fw.c_str(), (wchar_t*)wstr.c_str(), &fwlen); + } + if (wstr.empty()) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_FW, (void*)L"获取固件号失败", false); return ret; } - /*获取设备内存和硬盘容量大小*/ - int test_get_device_cpu_disk(void* data) + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_FW, (void*)wstr.c_str(), true); + + + std::string fvv = fw.substr(0, 4); + if (fvv != "G439" && fvv != "G239" && fvv != "G139") { - int cpu = 0; - unsigned len = 0; - int ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_CPU, &cpu, &len); + fvv = fw.substr(0, 2); + } - if (0 != cpu) + const wchar_t G139[6] = { 60,70,80,90,110 }; + const wchar_t G239[6] = { 90,100,110,120,130 }; + const wchar_t G300[6] = { 40,50,60,70,80,90 }; + const wchar_t G306[6] = { 30,40,50,60,70 }; + const wchar_t G400[6] = { 40,50,60,70,80 }; + SANE_Int num = 0; + unsigned int lensp = sizeof(SANE_Int); + ret = helper_->io_control(IO_CTRL_CODE_GET_SPEED_MODE, &num, &lensp); + int save_num = 0; + + if (fvv == "G3" || fvv == "G4" && num > 0 && num < 6) + { + for (size_t i = 0; i < sizeof(G400) / sizeof(G400[0]); i++)//3288设置速度模式为1 2 3 4 5 { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_DEVS_CPU, (void*)&cpu, true); + if ((num - 1) == i) + { + save_num = G400[i]; + break; + } } + } + else + save_num = num; - int disk = 0; - unsigned len2 = 0; - ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_DISK, &disk, &len2); + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_SP, (void*)&save_num, true); - if (0 != disk) + + std::string devs_model; + unsigned int devs_len = 0; + l = 0; + wstr.clear(); + + ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_MODEL, &devs_model[0], &devs_len); + if (ret == SANE_STATUS_NO_MEM) + { + devs_model.resize(devs_len); + ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_MODEL, &devs_model[0], &devs_len); + } + + ret = str_to_wchar(devs_model.c_str(), (wchar_t*)wstr.c_str(), &l); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + wstr.resize(l); + ret = str_to_wchar(devs_model.c_str(), (wchar_t*)wstr.c_str(), &l); + } + + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_CONFIG_DEVS_MODEL, wstr.empty() ? (void*)L"获取设备类型失败" : (void*)wstr.c_str(), wstr.empty() ? false : true); + + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"配置获取完成"), true); + return ret; +} +/*获取设备内存和硬盘容量大小*/ +int test::test_get_device_cpu_disk(void* data) +{ + int cpu = 0; + unsigned len = 0; + int ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_CPU, &cpu, &len); + + if (0 != cpu) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_DEVS_CPU, (void*)&cpu, true); + } + + int disk = 0; + unsigned len2 = 0; + ret = helper_->io_control(IO_CTRL_CODE_GET_DEVS_DISK, &disk, &len2); + + if (0 != disk) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_DEVS_DISK, (void*)&disk, true); + } + + if (0 == cpu || 0 == disk) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, nullptr, false); + return -1; + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, nullptr, true); + return -1; + } + + return ret; +} +/* 备份设备配置 */ +int test::test_backup(void* data) +{ + int val = 0; + unsigned int len = 0; + int ret = helper_->io_control(IO_CTRL_CODE_SET_BACKUP, &val, &len); + if (SCANNER_ERR_OK == ret) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"备份配置完成"), true); + } + else + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"备份配置失败"), false); + return -1; + } + return ret; +} +/* 关机 */ +int test::test_shutdown(void* data) +{ + int val = 0; + unsigned int len = 0; + int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_SHUTDOWN, &val, &len); + if (SCANNER_ERR_OK != ret) + { + if (SCANNER_ERR_DEVICE_NOT_SUPPORT == ret) { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVEB_GET_DEVICE_DEVS_DISK, (void*)&disk, true); - } - - if (0 == cpu || 0 == disk) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, nullptr, false); - return -1; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"设备固件不支持"), false); } else { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, nullptr, true); - return -1; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"关机失败"), false); } - return ret; + return -1; } - /* 备份设备配置 */ - int test_backup(void *data) - { - int val = 0; - unsigned int len = 0; - int ret = helper_->io_control(IO_CTRL_CODE_SET_BACKUP, &val, &len); - if (SCANNER_ERR_OK == ret) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"备份配置完成"), true); - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"备份配置失败"), false); - return -1; - } - return ret; - } - /* 关机 */ - int test_shutdown(void *data) - { - int val = 0; - unsigned int len = 0; - int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_SHUTDOWN, &val, &len); - if (SCANNER_ERR_OK != ret) - { - if (SCANNER_ERR_DEVICE_NOT_SUPPORT == ret) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"设备固件不支持"), false); - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)(L"关机失败"), false); - } - - return -1; - } - return ret; - } - /* 设置固件语言模式 */ - int test_set_firmware_language(void* data) - { - int mode = 0; - void* get_data = nullptr; + return ret; +} +/* 设置固件语言模式 */ +int test::test_set_firmware_language(void* data) +{ + int mode = 0; + void* get_data = nullptr; - parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_TIPS_VAL, set_test_name_.c_str(), L"请设置固件语言模式"); - if (ptr) - { - get_data = ptr->get_data(); - if (!get_data) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出设置固件语言模式流程", false); - return -1; - } - mode = *((int*)get_data); - } - else + parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_TIPS_VAL, set_test_name_.c_str(), L"请设置固件语言模式"); + if (ptr) + { + get_data = ptr->get_data(); + if (!get_data) { helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出设置固件语言模式流程", false); return -1; } - - int ret = helper_->io_control(IO_CTRL_CODE_SET_FIRMWARE_LANGUAGE, &mode, NULL); - if (ret != SCANNER_ERR_OK) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"不支持设置固件语言模式", false); - return -1; - } - else - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置固件语言模式成功,设备即将重启", true); - - int val = 0; - unsigned int len = sizeof(int); - int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_REBOOT, &val, &len); - } - - return ret; + mode = *((int*)get_data); } - /*设置设备型号*/ - int test_set_devs_model(void* data) + else { - if (!data) - { - return SCANNER_ERR_NO_DATA; - } - wchar_t* sc = (wchar_t*)data; - std::string str; - size_t len = 0; - int ret =wchar_to_char(str, sc, &len); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - str.resize(len); - ret = wchar_to_char(str, sc, &len); - } - if (str.empty()) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置设备类型失败", false); - - return -1; - } - unsigned int l = str.size(); - ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_MODEL, &str[0], &l); - if (ret != SCANNER_ERR_OK) - return ret; - - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置设备类型成功", true); - return ret; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出设置固件语言模式流程", false); + return -1; } - int public_test_image_correct(void* data, int dpi, bool isColor) + + int ret = helper_->io_control(IO_CTRL_CODE_SET_FIRMWARE_LANGUAGE, &mode, NULL); + if (ret != SCANNER_ERR_OK) { - if (!data) - { - return SCANNER_ERR_NO_DATA; - } - wchar_t* sc = (wchar_t*)data; - std::string str; - size_t len = 0; - int ret = wchar_to_char(str, sc, &len); - if (ret == ERROR_INSUFFICIENT_BUFFER) - { - str.resize(len); - ret = wchar_to_char(str, sc, &len); - } - if (str.empty()) - { - helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"校正失败", false); - - return -1; - } - - unsigned int l = str.size(); - ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &l); - const char* color = isColor ? OPTION_VALUE_YSMS_24WCS : OPTION_VALUE_YSMS_256JHD; - unsigned int colorlen = strlen(color); - ret = helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); - - SANE_Bool isOriImg = true; - ret = ret = helper_->io_control(IO_CTRL_CODE_ORIGINAL_IMAGE, (void*)&isOriImg, &l); - - ret = helper_->io_control(IO_CTRL_CODE_SET_CORRECT_IMAGE, &str[0], &l); - ret = helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL); - - if (ret != SCANNER_ERR_OK) - return ret; - - //helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"校正完成", true); - return ret; + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"不支持设置固件语言模式", false); + return -1; } - int test_image_correct_rgb_200dpi(void* data) + else { - return public_test_image_correct(data, 200, true); - } - int test_image_correct_gray_200dpi(void* data) - { - return public_test_image_correct(data, 200, false); - } - int test_image_correct_rgb_300dpi(void* data) - { - return public_test_image_correct(data, 300, true); - } - int test_image_correct_gray_300dpi(void* data) - { - return public_test_image_correct(data, 300, false); - } - int test_image_correct_rgb_600dpi(void* data) - { - return public_test_image_correct(data, 600, true); - } - int test_image_correct_gray_600dpi(void* data) - { - return public_test_image_correct(data, 600, false); - } -private: + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"设置固件语言模式成功,设备即将重启", true); -}; + int val = 0; + unsigned int len = sizeof(int); + int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_REBOOT, &val, &len); + } - -//test -static std::string jsontext1("{\"1\":{\"NAME\":\"test-8\",\"ver\":1}}"); -bool have_img_ = false; - -DECL_API(int) func_test_init(void* init) + return ret; +} +/*设置设备型号*/ +int test::test_set_devs_model(void* data) { + if (!data) + { + return SCANNER_ERR_NO_DATA; + } + wchar_t* sc = (wchar_t*)data; + std::string str; + size_t len = 0; + int ret = wchar_to_char(str, sc, &len); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(len); + ret = wchar_to_char(str, sc, &len); + } + if (str.empty()) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置设备类型失败", false); + + return -1; + } + unsigned int l = str.size(); + ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_MODEL, &str[0], &l); + if (ret != SCANNER_ERR_OK) + return ret; + + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_MANUAL_CONFIRMATION, (void*)L"设置设备类型成功", true); + return ret; +} + +int test::public_test_image_correct(std::string correctData, int dpi, bool isColor) +{ + if (correctData.empty()) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"校正失败", false); + + return -1; + } + + unsigned int l = correctData.size(); + int ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &l); + const char* color = isColor ? OPTION_VALUE_YSMS_24WCS : OPTION_VALUE_YSMS_256JHD; + unsigned int colorlen = strlen(color); + ret = helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); + + SANE_Bool isOriImg = true; + ret = ret = helper_->io_control(IO_CTRL_CODE_ORIGINAL_IMAGE, (void*)&isOriImg, &l); + + ret = helper_->io_control(IO_CTRL_CODE_SET_CORRECT_IMAGE, &correctData[0], &l); + ret = helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); + + if (ret != SCANNER_ERR_OK) + return ret; + + //helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"校正完成", true); + return ret; +} + +int test::public_test_image_correct(void* data, int dpi, bool isColor) +{ + if (!data) + { + return SCANNER_ERR_NO_DATA; + } + wchar_t* sc = (wchar_t*)data; + std::string str; + size_t len = 0; + int ret = wchar_to_char(str, sc, &len); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(len); + ret = wchar_to_char(str, sc, &len); + } + if (str.empty()) + { + helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"校正失败", false); + + return -1; + } + + unsigned int l = str.size(); + ret = helper_->io_control(IO_CTRL_CODE_SET_DPI, (void*)&dpi, &l); + const char* color = isColor ? OPTION_VALUE_YSMS_24WCS : OPTION_VALUE_YSMS_256JHD; + unsigned int colorlen = strlen(color); + ret = helper_->io_control(IO_CTRL_CODE_SET_COLOR, (void*)color, &colorlen); + + SANE_Bool isOriImg = true; + ret = ret = helper_->io_control(IO_CTRL_CODE_ORIGINAL_IMAGE, (void*)&isOriImg, &l); + + ret = helper_->io_control(IO_CTRL_CODE_SET_CORRECT_IMAGE, &str[0], &l); + ret = helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); + + if (ret != SCANNER_ERR_OK) + return ret; + + //helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"校正完成", true); + return ret; +} + +int test::test_image_correct_all(void* data) +{ + if (!data) + { + return SCANNER_ERR_NO_DATA; + } + wchar_t* sc = (wchar_t*)data; + std::string str; + size_t len = 0; + int ret = wchar_to_char(str, sc, &len); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + str.resize(len); + ret = wchar_to_char(str, sc, &len); + } + + g_currentCorrectType = 1; + thread_dynamic_correct_handle.reset(new std::thread(&test::thread_dynamic_correct, this, str)); + + return SCANNER_ERR_OK; +} + +int test::test_image_correct_rgb_200dpi(void* data) +{ + return public_test_image_correct(data, 200, true); +} + +int test::test_image_correct_gray_200dpi(void* data) +{ + return public_test_image_correct(data, 200, false); +} +int test::test_image_correct_rgb_300dpi(void* data) +{ + return public_test_image_correct(data, 300, true); +} +int test::test_image_correct_gray_300dpi(void* data) +{ + return public_test_image_correct(data, 300, false); +} +int test::test_image_correct_rgb_600dpi(void* data) +{ + return public_test_image_correct(data, 600, true); +} +int test::test_image_correct_gray_600dpi(void* data) +{ + return public_test_image_correct(data, 600, false); +} + +DECL_API(int) func_test_init(void* init, ui_helper* helper) +{ + if (test_ == nullptr) + { + test_ = new test(helper); + } + return 0; } -DECL_API(int) func_test_get_list(wchar_t* buf, size_t* len) +DECL_API(int) func_test_go(const wchar_t* NAME, const wchar_t* oper) { - return str_to_wchar(jsontext1, buf, len); -} -DECL_API(int) func_test_go(const wchar_t* NAME, const wchar_t* oper, ui_helper* helper) -{ - if (!NAME || !oper || !helper) + if (!NAME || !oper || !test_) { return -1; } - //helper->add_ref(void *data); is_distortion_get_image = false; is_distortion_get_image_abnormal = false; @@ -1732,12 +1814,29 @@ DECL_API(int) func_test_go(const wchar_t* NAME, const wchar_t* oper, ui_helper* int ret = 0; SANE_Bool type = false; unsigned int len = sizeof(SANE_Bool); - test ts(helper); //ret = helper->io_control(IO_CTRL_CODE_RESTORE_SETTINGS, NULL, NULL);//结束恢复默认 - return ts.set_test(NAME, oper); + return test_->set_test(NAME, oper); } DECL_API(int) func_test_uninit(void* uninit) { + if (test_ != nullptr) + { + delete test_; + test_ = nullptr; + } + + return 0; +} + +DECL_API(int) func_test_correct(bool isSuccess, int *currentIndex) +{ + if (!isSuccess) + { + g_dynamicCorrectStatus = SCANNER_ERR_IMAGE_CORRECTION_FAIL; + *currentIndex = g_currentCorrectType - 1; + } + + test_->m_waitCorrect.notify_all(); return 0; } diff --git a/code/base/test_base.h b/code/base/test_base.h index 0d4b131..d888274 100644 --- a/code/base/test_base.h +++ b/code/base/test_base.h @@ -3,6 +3,10 @@ #include "sane/sane_ex.h" #include "ui_helper.h" #include +#include +#include +#include +#include //////////////////////////////////////TITLE////////////////////////////////////// @@ -98,6 +102,8 @@ #define HGPDTTOOLDB_TITLE_SHUTDOWN L"关机" /*设置固件语言模式*/ #define HGPDTTOOLDB_TITLE_SET_FIRMWARE_LANGUAGE L"设置固件语言模式" +/*图像扫描校正*/ +#define HGPDTTOOLDB_TITLE_IMAGE_CORRECTION L"图像扫描校正" /*彩色图像扫描校正+200dpi*/ #define HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_200DPI L"彩色图像扫描校正+200dpi" /*灰度图像扫描校正+200dpi*/ @@ -110,7 +116,9 @@ #define HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_RGB_600DPI L"彩色图像扫描校正+600dpi" /*灰度图像扫描校正+600dpi*/ #define HGPDTTOOLDB_TITLE_IMAGE_CORRECTION_GRAY_600DPI L"灰度图像扫描校正+600dpi" + //////////////////////////////////////NAME////////////////////////////////////// + #define WRITE_CFG_NAME L"write-cfg" /* 设置json序列号 */ #define HGPDTTOOLDB_NAME_SET_JSON_SN L"SET_JSON_SN" @@ -216,6 +224,8 @@ #define HGPDTTOOLDB_NAME_SHUTDOWN L"SHUTDOWN" /*设置固件语言模式*/ #define HGPDTTOOLDB_NAME_SET_FIRMWARE_LANGUAGE L"SET_FIRMWARE_LANGUAGE" +/*图像扫描校正*/ +#define HGPDTTOOLDB_NAME_IMAGE_CORRECTION L"IMAGE_CORRECTION" /*彩色图像扫描校正+200dpi*/ #define HGPDTTOOLDB_NAME_IMAGE_CORRECTION_RGB_200DPI L"IMAGE_CORRECTION_RGB_200DPI" /*灰度图像扫描校正+200dpi*/ @@ -237,20 +247,8 @@ #endif // Function: initialize module -DECL_API(int) func_test_init(void*); - -// Function: to get testing function list supported by this module/DLL -// -// Parameter: buf - to receive the list JSON -// -// len - [in] space of 'buf' in words, [out] words copied in buf, or less buffer size in words if return ERROR_INSUFFICIENT_BUFFER -// -// Return: ERROR_SUCCESS - JSON configuration has copied into buf -// ERROR_INSUFFICIENT_BUFFER - buffer is too small, and the minium size in words is stored in 'len' -// ERROR_INVALID_PARAMETER - NULL for parameter 'len' is not acceptable -DECL_API(int) func_test_get_list(wchar_t* buf // to receive the JSON text - , size_t* len); // [in] space of 'buf' in words, [out] words copied in buf, or less buffer size in words if return ERROR_INSUFFICIENT_BUFFER - +// helper - parameter and testing process callback +DECL_API(int) func_test_init(void* init, ui_helper* helper); enum write_cat { @@ -272,212 +270,161 @@ typedef struct _write_cfg // // oper - test operation, "start", "pause", "resume", "stop", ... // -// helper - parameter and testing process callback // // Return: error code DECL_API(int) func_test_go(const wchar_t* name // test name - , const wchar_t* oper // test oper - "start", "pause", "resume", "stop", ... - , ui_helper* helper); + , const wchar_t* oper); // Function: uninitialize module DECL_API(int) func_test_uninit(void*); +// Function: do dynamic image correction +// +// Parameter: currentIndex - Get current correct type; 1:200dpi-color; 2:200dpi-gray;3:300dpi-color; 4:300dpi-gray;5:600dpi-color; 6:600dpi-gray; +// +// isSuccess - Explain whether the correction was successful this time. +// +// Return: error code +DECL_API(int) func_test_correct(bool isSuccess, int* currentIndex); -////////////////////////////////////////////////////////////////////////////////////////////////// -/*/ testing-DLL load code ... -#include -#include -#include -#include -class json : public ref +class test { public: - json(); + test(ui_helper* helper); + ~test(); -protected: - ~json(); + std::map test_map_; + std::condition_variable m_waitCorrect; + std::mutex m_lock; + ui_helper* helper_; + int fw_; + std::mutex mutex_; + std::condition_variable cv_; -public: - bool attach(const wchar_t* text); - bool get_value(const wchar_t* key, int& val); - bool get_value(const wchar_t* key, std::wstring& val); - bool get_value(const wchar_t* key, json*& val); + void init_test_map_(); + int set_test(const wchar_t* name, const wchar_t* oper); + +private: + std::unique_ptr thread_dynamic_correct_handle; + void thread_dynamic_correct(std::string correctData); + + struct CorrectMode + { + int dpi; + bool isColor; + + }; + + std::map m_correctModeMap + { + {1, CorrectMode{200, true}}, + {2, CorrectMode{200, false}}, + {3, CorrectMode{300, true}}, + {4, CorrectMode{300, false}}, + {5, CorrectMode{600, true}}, + {6, CorrectMode{600, false}} + }; + +private: + /*设置vid pid*/ + int test_set_vidpid(void* data); + /*设置序列号*/ + int test_set_serial_num(void* data); + /* 设置休眠 */ + int test_dormancy(void* data); + /*获取固件版本号*/ + std::string get_firmware_version(); + /* 配置速度模式 */ + int test_configure_speed_mode(void* data); + int set_init_cfg(void* data); + /*设置序列号*/ + int test_set_json_serial_num(void* data); + /* 清理纸道功能确认 */ + int tset_clear_paper_path(void* data); + /* 按键功能检测 */ + int test_key_funtion(void* data); + /* 计数模式检测 */ + int test_count_mode(void* data); + /* 歪斜检测 */ + int test_skew_detection(void* data); + /* 分纸电机检测 */ + int test_separater_motor(void* data); + /* cis原图初检 */ + int test_cis__original_image(void* data); + /* 主机风扇功能检测 */ + int test_host_fan(void* data); + /* 扫描工作状态 */ + int test_scan_work_status(void* data); + /* USB-PC接口 */ + int test_usb_pc_interface(void* data); + /* 超声波模块检验 */ + int test_ultrasonic_module(void* data); + /* led灯状态检查 */ + int test_led_light(void* data); + /* 复位检查 */ + int test_reset(void* data); + /* 走纸检查 */ + int test_paper_feed(void* data); + /* 扫描传感器检查 */ + int test_scanning_sensor(void* data); + /* 放置校正纸 */ + int test_place_correction_paper(void* data); + /* 自动平场校正 */ + int test_auto_flat_field(void* data); + /* 重启设备 */ + int test_reboot_device(void* data); + /* 扫描图像彩色质量确认 */ + int test_image_color_quality(void* data); + /* 扫描图像灰度质量确认 */ + int test_image_gray_quality(void* data); + /* 获取自动计算畸变值 */ + int test_get_auto_distortion(void* data); + int test_set_auto_distortion(void* data); + int test_confirm_auto_distortion(void* data); + /* 分纸强度检测 */ + int test_paper_separation_strength(void* data); + /* 机械走纸倾斜检测 */ + int test_mech_paper_feeding_inclination(void* data); + /* 清除滚轴计数 */ + int test_clear_roller_count(void* data); + /* 清除历史计数 */ + int test_clear_history_count(void* data); + /* 单张测试 */ + int test_single_page_test(void* data); + /*压力测试彩色_200dpi*/ + int test_pressuer_test_rgb_200dpi(void* data); + /*压力测试灰色_200dpi*/ + int test_pressuer_test_gray_200dpi(void* data); + /*压力测试彩色_300dpi*/ + int test_pressuer_test_rgb_300dpi(void* data); + /*压力测试灰色_300dpi*/ + int test_pressuer_test_gray_300dpi(void* data); + /*压力测试彩色_600dpi*/ + int test_pressuer_test_rgb_600dpi(void* data); + /*压力测试灰色_600dpi*/ + int test_pressuer_test_gray_600dpi(void* data); + /*获取设备配置*/ + int test_get_device_config(void* data); + /*获取设备内存和硬盘容量大小*/ + int test_get_device_cpu_disk(void* data); + /* 备份设备配置 */ + int test_backup(void* data); + /* 关机 */ + int test_shutdown(void* data); + /* 设置固件语言模式 */ + int test_set_firmware_language(void* data); + /*设置设备型号*/ + int test_set_devs_model(void* data); + /*动态图像校正*/ + int public_test_image_correct(std::string correctData, int dpi, bool isColor); + int public_test_image_correct(void* data, int dpi, bool isColor); + int test_image_correct_all(void* data); + int test_image_correct_rgb_200dpi(void* data); + int test_image_correct_gray_200dpi(void* data); + int test_image_correct_rgb_300dpi(void* data); + int test_image_correct_gray_300dpi(void* data); + int test_image_correct_rgb_600dpi(void* data); + int test_image_correct_gray_600dpi(void* data); }; -class test_factory -{ - typedef struct _test_func - { - std::wstring name; - int ver; - int(__stdcall* test_api)(const wchar_t*, const wchar_t*, ui_helper*); - - struct _test_func() - { - name = L""; - ver = 0; - test_api = NULL; - } - bool operator==(const wchar_t* n) - { - return name == n; - } - }TESTFUNC, *LPTESTFUNC; - std::vector test_; - - void add_api(const wchar_t* name, int ver, int(__stdcall* test_api)(const wchar_t*, const wchar_t*, ui_helper*)) - { - std::vector::iterator it = std::find(test_.begin(), test_.end(), name); - - if (it == test_.end()) - { - TESTFUNC tf; - - tf.name = name; - tf.ver = ver; - tf.test_api = test_api; - test_.push_back(tf); - } - else if (ver > it->ver) - { - it->test_api = test_api; - it->ver = ver; - } - } - void load_test_dll(const wchar_t* path_dll) - { - HMODULE mod = LoadLibraryW(path_dll); - int(__stdcall * init)(void*) = NULL; - int(__stdcall * get)(void*, size_t*) = NULL; - int(__stdcall * go)(const wchar_t*, const wchar_t*, ui_helper*) = NULL; - FARPROC* api = (FARPROC*)&init; - wchar_t* buf = NULL; - size_t len = 0; - json* root = NULL, * child = NULL; - - if (!mod) - return; - - *api = GetProcAddress(mod, "func_test_init"); - if (!api) - { - FreeLibrary(mod); - return; - } - init(NULL); - - api = (FARPROC*)&get; - *api = GetProcAddress(mod, "func_test_get_list"); - if(!api) - { - FreeLibrary(mod); - return; - } - - api = (FARPROC*)&go; - *api = GetProcAddress(mod, "func_test_go"); - if (!api) - { - FreeLibrary(mod); - return; - } - - if(get(buf, &len) != ERROR_INSUFFICIENT_BUFFER) - { - FreeLibrary(mod); - return; - } - - buf = new wchar_t[len + 8]; - memset(buf, 0, (len + 8) * 2); - if (get(buf, &len)) - { - delete[] buf; - FreeLibrary(mod); - return; - } - - // parse json ... - len = 0; - root = new json(); - if (root->attach(buf)) - { - for (int i = 1; 1; ++i) - { - swprintf_s(buf, 20, L"%d", i); - if (!root->get_value(buf, child) || !child) - break; - - std::wstring name(L""); - int ver = 0; - if (child->get_value(L"name", name) && child->get_value(L"ver", ver)) - { - add_api(name.c_str(), ver, go); - len++; - } - child->release(); - } - } - - root->release(); - delete[] buf; - if (len == 0) - FreeLibrary(mod); - } - void init(void) - { - wchar_t path[MAX_PATH] = { 0 }; - std::wstring dir(L""); - size_t pos = 0; - HANDLE hf = INVALID_HANDLE_VALUE; - WIN32_FIND_DATAW fd = { 0 }; - - GetModuleFileNameW(NULL, path, _countof(path) - 1); - dir = pos; - pos = dir.rfind(L'\\'); - if (pos++ == std::wstring::npos) - return; - - dir.erase(pos); - dir += L"dlls\\"; - hf = FindFirstFileW((dir + L"*.dll").c_str(), &fd); - if (hf != INVALID_HANDLE_VALUE) - { - do - { - load_test_dll((dir + fd.cFileName).c_str()); - } while (FindNextFileW(hf, &fd)); - - FindClose(hf); - } - } - -public: - test_factory() - { - init(); - } - ~test_factory() - { - - } - -public: - bool is_test_available(const wchar_t* name) // check if the test item with name 'name' is supported - { - std::vector::iterator it = std::find(test_.begin(), test_.end(), name); - - return it != test_.end(); - } - int test(const wchar_t* name, ui_helper* ui, const wchar_t* oper = L"start") - { - std::vector::iterator it = std::find(test_.begin(), test_.end(), name); - - if (it == test_.end()) - return ERROR_NOT_SUPPORTED; - - return it->test_api(name, oper, ui); - } -}; -/////////////////////////*////////////////////////////////////////////////////////////////////////