From 9363327807f752fff8398e999d2b820ce0654d5a Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Mon, 26 Dec 2022 17:18:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/base/test_base.cpp | 349 +++++++++++++++++++++------------------- 1 file changed, 179 insertions(+), 170 deletions(-) diff --git a/code/base/test_base.cpp b/code/base/test_base.cpp index 7b8a142..6a0be82 100644 --- a/code/base/test_base.cpp +++ b/code/base/test_base.cpp @@ -7,12 +7,118 @@ #include "huagao/hgscanner_error.h" + +static int str_to_wchar(std::string str, wchar_t* s, size_t* strlen) +{ + if (str.empty()) + return ERROR_INSUFFICIENT_BUFFER; + + size_t size = str.length(); + int len = 0; + len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0); + if (*strlen < len) + { + *strlen = len; + return ERROR_INSUFFICIENT_BUFFER; + } + MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, s, len); + return 0; +} +int get_json_config_file() +{ + int len = 0; + char exePath[256]; + char* buf = NULL; + GetModuleFileNameA(NULL, exePath, 255); + (strrchr(exePath, '\\'))[1] = 0; //去掉执行的文件名。 + + strcat(exePath, "DLLs\\G302.hsc"); + FILE* fp = fopen(exePath, "rb"); + if (fp == NULL) + { + return -1; + } + fseek(fp, 0, SEEK_END); + len = ftell(fp); + fseek(fp, 0, SEEK_SET); + buf = new char[len]; + if (!buf) + { + fclose(fp); + return -1; + } + memset(buf, 0, len); + fread(buf, len, 1, fp); + fclose(fp); + std::cout << buf << std::endl; +} + +static std::wstring set_test_name_; class test { ui_helper* helper_; + 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; + switch (code) + { + case SANE_EVENT_WORKING: + { + + + } + break; + case SANE_EVENT_SCAN_FINISHED: + { + std::wstring wstr = L""; + size_t len = 0; + bool type = false; + int ret = str_to_wchar((char*)data, (wchar_t*)wstr.c_str(),&len); + if (ret == ERROR_INSUFFICIENT_BUFFER) + ret = str_to_wchar((char*)data, (wchar_t*)wstr.c_str(), &len); + if (ret == ERROR_INSUFFICIENT_BUFFER) + { + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), type); + return -1; + } + + if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_TITLE_SKEW_DETECTION) == 0) + { + type = strcmp((char*)data, STATU_DESC_SCANNER_ERR_DEVICE_PAPER_SKEW) == 0 ? true : false; + } + + h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), type); + } + break; + case SANE_EVENT_STATUS: + { + //std::string ret_call_ = (char*)data; + } + break; + case SANE_EVENT_ERROR: + { + //ret_call_ = (char*)data; + } + break; + case SANE_EVENT_IMAGE_OK: + { + //SANE_Image* sane_img = (SANE_Image*)data; + //have_img_ = true; + } + break; + } + return 0; + } test(ui_helper* helper) :helper_(helper) { + helper->register_sane_callback(sane_ex_callback, NULL); init_test_map_(); } ~test() @@ -20,70 +126,56 @@ public: struct ptrcmp { - bool operator()(const wchar_t* name1, const wchar_t* name2)const + bool operator()(const wchar_t* TITLE1, const wchar_t* TITLE2)const { - return wcscmp(name1, name2) < 0; + return wcscmp(TITLE1, TITLE2) < 0; } }; std::map test_map_; void init_test_map_() { - test_map_[HGPDTTOOLDB_NAME_DIAL_SWITCH] = &test::test_dial_switch; - test_map_[HGPDTTOOLDB_NAME_ROCKER_SWITCH] = &test::test_pocker_switch; - test_map_[HGPDTTOOLDB_NAME_BOOT_STATUS] = &test::test_boot_status; - test_map_[HGPDTTOOLDB_NAME_LCD_DISPLAY] = &test::test_lcd_display; - 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_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_COVER_SENSOR] = &test::test_cover_sensor; - 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_QUALITY] = &test::test_image_quality; - test_map_[HGPDTTOOLDB_NAME_COLORCARD_IMAGEING_QUALITY] = &test::test_colorcard_imageing_quality; - test_map_[HGPDTTOOLDB_NAME_COLORCARD_BIAS_IMAGEING_QUALITY] = &test::test_colorcard_bias_imageing_quality; - test_map_[HGPDTTOOLDB_NAME_CLARITY_QUALITY] = &test::test_clarity_quality; - test_map_[HGPDTTOOLDB_NAME_DISTORTION] = &test::test_distortion; - test_map_[HGPDTTOOLDB_NAME_DORMANCY] = &test::test_dormancy; - test_map_[HGPDTTOOLDB_NAME_SKEW_GEAR] = &test::test_skew_gear; - 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_SINGLE_PAGE_TEST_1] = &test::test_single_page_test_1; - test_map_[HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST_2] = &test::test_single_page_test_2; - test_map_[HGPDTTOOLDB_NAME_SINGLE_PAGE_TEST_3] = &test::test_single_page_test_3; - test_map_[HGPDTTOOLDB_NAME_PRESSUER_TEST] = &test::test_pressuer_test; - test_map_[HGPDTTOOLDB_NAME_CLEAR_ROLLER_COUNT] = &test::test_clear_roller_count; + test_map_[HGPDTTOOLDB_TITLE_DIAL_SWITCH] = &test::test_dial_switch; + test_map_[HGPDTTOOLDB_TITLE_ROCKER_SWITCH] = &test::test_pocker_switch; + test_map_[HGPDTTOOLDB_TITLE_BOOT_STATUS] = &test::test_boot_status; + test_map_[HGPDTTOOLDB_TITLE_LCD_DISPLAY] = &test::test_lcd_display; + test_map_[HGPDTTOOLDB_TITLE_CLEAR_PAPER_PATH] = &test::tset_clear_paper_path; + test_map_[HGPDTTOOLDB_TITLE_KEY_FUNCTION] = &test::test_key_funtion; + test_map_[HGPDTTOOLDB_TITLE_COUNTING_MODE] = &test::test_count_mode; + test_map_[HGPDTTOOLDB_TITLE_SKEW_DETECTION] = &test::test_skew_detection; + test_map_[HGPDTTOOLDB_TITLE_SEPARATER_MOTOR] = &test::test_separater_motor; + test_map_[HGPDTTOOLDB_TITLE_CIS_ORIGINAL_IMAGE] = &test::test_cis__original_image; + test_map_[HGPDTTOOLDB_TITLE_HOST_FAN] = &test::test_host_fan; + test_map_[HGPDTTOOLDB_TITLE_ULTRASONIC_MODULE] = &test::test_ultrasonic_module; + test_map_[HGPDTTOOLDB_TITLE_LED_LIGHT] = &test::test_led_light; + test_map_[HGPDTTOOLDB_TITLE_RESET] = &test::test_reset; + test_map_[HGPDTTOOLDB_TITLE_PAPER_FEED] = &test::test_paper_feed; + test_map_[HGPDTTOOLDB_TITLE_COVER_SENSOR] = &test::test_cover_sensor; + test_map_[HGPDTTOOLDB_TITLE_SCANNING_SENSOR] = &test::test_scanning_sensor; + test_map_[HGPDTTOOLDB_TITLE_CONFIGURE_SPEED_MODE] = &test::test_configure_speed_mode; + test_map_[HGPDTTOOLDB_TITLE_PLACE_CORRECTION_PAPER] = &test::test_place_correction_paper; + test_map_[HGPDTTOOLDB_TITLE_AUTO_FLAT_FIELD] = &test::test_auto_flat_field; + test_map_[HGPDTTOOLDB_TITLE_REBOOT_DEVICE] = &test::test_reboot_device; + test_map_[HGPDTTOOLDB_TITLE_IMAGE_QUALITY] = &test::test_image_quality; + test_map_[HGPDTTOOLDB_TITLE_COLORCARD_IMAGEING_QUALITY] = &test::test_colorcard_imageing_quality; + test_map_[HGPDTTOOLDB_TITLE_COLORCARD_BIAS_IMAGEING_QUALITY] = &test::test_colorcard_bias_imageing_quality; + test_map_[HGPDTTOOLDB_TITLE_CLARITY_QUALITY] = &test::test_clarity_quality; + test_map_[HGPDTTOOLDB_TITLE_DISTORTION] = &test::test_distortion; + test_map_[HGPDTTOOLDB_TITLE_DORMANCY] = &test::test_dormancy; + test_map_[HGPDTTOOLDB_TITLE_SKEW_GEAR] = &test::test_skew_gear; + test_map_[HGPDTTOOLDB_TITLE_PAPER_SEPARATION_STRENGTH] = &test::test_paper_separation_strength; + test_map_[HGPDTTOOLDB_TITLE_MECH_PAPER_FEEDING_INCLINATION] = &test::test_mech_paper_feeding_inclination; + test_map_[HGPDTTOOLDB_TITLE_SINGLE_PAGE_TEST_1] = &test::test_single_page_test_1; + test_map_[HGPDTTOOLDB_TITLE_SINGLE_PAGE_TEST_2] = &test::test_single_page_test_2; + test_map_[HGPDTTOOLDB_TITLE_SINGLE_PAGE_TEST_3] = &test::test_single_page_test_3; + test_map_[HGPDTTOOLDB_TITLE_PRESSUER_TEST] = &test::test_pressuer_test; + test_map_[HGPDTTOOLDB_TITLE_CLEAR_ROLLER_COUNT] = &test::test_clear_roller_count; } int set_test(const wchar_t* str) { if (!str) return SCANNER_ERR_NO_DATA; - - ui_helper::test_event test_ev_; + set_test_name_ = str; int ret = SCANNER_ERR_OK; - std::wstring s = str; - //int count = test_map_.count(str) > 0; - wchar_t* start = (wchar_t*)L"START TEST "; - wchar_t* stop = (wchar_t*)L"STOP TEST "; - wchar_t ss[10]; - wcscpy(ss,str); - /*if (!count) - { - ret = SCANNER_ERR_NO_DATA; - return ret; - }*/ - //wcscat(start,str); - //helper_->test_callback(str, ui_helper::TEST_EVENT_TIPS, start, NULL); auto it = test_map_.find(str); if (it != test_map_.end()) @@ -92,15 +184,12 @@ public: } else { - return SCANNER_ERR_OK; + helper_->test_callback(str, ui_helper::TEST_EVENT_NOT_FIND_TEST, NULL, false); } if (ret != SCANNER_ERR_OK) { - helper_->test_callback(str, ui_helper::TEST_EVENT_TIPS, NULL, ret); - return ret; + helper_->test_callback(str, ui_helper::TEST_EVENT_IO_FAIL, NULL, ret); } - - helper_->test_callback(str, ui_helper::TEST_EVENT_TIPS, stop, ret); return ret; } public: @@ -130,12 +219,12 @@ public: /* 清理纸道功能确认 */ int tset_clear_paper_path() { - ui_helper::test_event test_ev_ = ui_helper::TEST_EVENT_RESULT; int ret = helper_->io_control(IO_CTRL_CODE_GET_CLEAN_PAPER_ROAD, NULL, NULL); if (ret != SCANNER_ERR_OK) { - helper_->test_callback(HGPDTTOOLDB_NAME_DIAL_SWITCH, test_ev_, NULL, ret); + return ret; } + helper_->test_callback(HGPDTTOOLDB_TITLE_CLEAR_PAPER_PATH, ui_helper::TEST_EVENT_RESULT, NULL, true); return ret; } /* 按键功能检测 */ @@ -147,42 +236,38 @@ public: int test_count_mode() { - ui_helper::test_event test_ev_= ui_helper::TEST_EVENT_RESULT; + ui_helper::test_event test_ev_ = ui_helper::TEST_EVENT_RESULT; SANE_Bool ismode = false; unsigned int len = sizeof(SANE_Bool); - - int ret = helper_->io_control(IO_CTRL_CODE_GET_CLEAN_PAPER_ROAD, &ismode, &len); + + int ret = helper_->io_control(IO_CTRL_CODE_GET_IS_MODE, &ismode, &len); if (ret != SCANNER_ERR_OK) { - helper_->test_callback(HGPDTTOOLDB_NAME_DIAL_SWITCH, test_ev_, NULL, ret); + helper_->test_callback(HGPDTTOOLDB_TITLE_COUNTING_MODE, test_ev_, NULL, ret); return ret; } - - helper_->test_callback(HGPDTTOOLDB_NAME_DIAL_SWITCH, test_ev_, NULL, ismode); + + helper_->test_callback(HGPDTTOOLDB_TITLE_COUNTING_MODE, test_ev_, NULL, ismode); return ret; } /* 歪斜检测 */ int test_skew_detection() { - - ui_helper::test_event test_ev_ = ui_helper::TEST_EVENT_RESULT; - SANE_Bool ismode = true; + SANE_Bool type = true; unsigned int len = sizeof(SANE_Bool); + int checknum = 1; - int ret = helper_->io_control(IO_CTRL_CODE_SET_SKEW_CHECK, &ismode, &len); + 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, &checknum, &len); if (ret != SCANNER_ERR_OK) - { - helper_->test_callback(HGPDTTOOLDB_NAME_SKEW_DETECTION, test_ev_, NULL, ret); return ret; - } - int i = 5; - ret = helper_->io_control(IO_CTRL_CODE_SET_SKEW_CHECK_VAL, &i, &len); ret = helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL); + if (ret != SCANNER_ERR_OK) + return ret; - - helper_->test_callback(HGPDTTOOLDB_NAME_SKEW_DETECTION, test_ev_, NULL, ismode); return ret; - return SCANNER_ERR_OK; } /* 分纸电机检测 */ int test_separater_motor() @@ -215,12 +300,12 @@ public: return SCANNER_ERR_OK; } /* 走纸检查 */ - int test_paper_feed() + int test_paper_feed() //使用单张扫描测试 { return SCANNER_ERR_OK; } /* 开盖传感器检查 */ - int test_cover_sensor() + int test_cover_sensor() //int端点返回 使用单张扫描测试 { return SCANNER_ERR_OK; } @@ -324,116 +409,40 @@ private: }; - //test -static std::string jsontext1("{\"1\":{\"name\":\"test-8\",\"ver\":1}}"); -std::string ret_call_= ""; +static std::string jsontext1("{\"1\":{\"TITLE\":\"test-8\",\"ver\":1}}"); bool have_img_ = false; -int sane_ex_callback1(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param) +#define TEST_PTR(ptr) ((test*)ptr) +DECL_API(int) func_test_init(void** hanld, ui_helper* helper) { - switch (code) + if (helper) { - case SANE_EVENT_WORKING: - { - ret_call_ = (char*)data; + test* ts = new test(helper); + *hanld = (void*)ts; } - break; - case SANE_EVENT_SCAN_FINISHED: - { - ret_call_ = (char*)data; - } - break; - case SANE_EVENT_STATUS: - { - ret_call_ = (char*)data; - } - break; - case SANE_EVENT_ERROR: - { - ret_call_ = (char*)data; - } - break; - case SANE_EVENT_IMAGE_OK: - { - SANE_Image* sane_img = (SANE_Image*)data; - have_img_ = true; - } - break; - } - - return 0; -} -int str_to_wchar(std::string str, wchar_t* s, size_t* strlen) -{ - if (str.empty()) - return ERROR_INSUFFICIENT_BUFFER; - - size_t size = str.length(); - int len = 0; - len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0); - if (*strlen < len) - { - *strlen = len; - return ERROR_INSUFFICIENT_BUFFER; - } - MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, s, len); - return 0; -} -int get_json_config_file() -{ - int len = 0; - char exePath[256]; - char* buf = NULL; - GetModuleFileNameA(NULL, exePath, 255); - (strrchr(exePath, '\\'))[1] = 0; //去掉执行的文件名。 - - strcat(exePath, "DLLs\\G302.hsc"); - FILE* fp = fopen(exePath, "rb"); - if (fp == NULL) - { - return -1; - } - fseek(fp, 0, SEEK_END); - len = ftell(fp); - fseek(fp, 0, SEEK_SET); - buf = new char[len]; - if (!buf) - { - fclose(fp); - return -1; - } - memset(buf, 0, len); - fread(buf, len, 1, fp); - fclose(fp); - std::cout << buf << std::endl; -} - -DECL_API(int) func_test_init(void* init) -{ return 0; } DECL_API(int) func_test_get_list(wchar_t* buf, size_t* len) { return str_to_wchar(jsontext1, buf, len); } -DECL_API(int) func_test_go(const wchar_t* name, const wchar_t* oper, ui_helper* helper) +DECL_API(int) func_test_go(void* hanld, const wchar_t* TITLE, const wchar_t* oper) { - if (!name || !oper || !helper) + if (!TITLE || !oper) { return -1; } //helper->add_ref(); - helper->register_sane_callback(sane_ex_callback1, NULL); - int ret = 0; - test ts(helper); - ret = ts.set_test(name); + int ret = TEST_PTR(hanld)->set_test(TITLE); - ret = helper->io_control(IO_CTRL_CODE_RESTORE_SETTINGS, NULL, NULL);//结束恢复默认 return ret; } -DECL_API(int) func_test_uninit(void* uninit) +DECL_API(int) func_test_uninit(void* hanld) { + if (hanld) + { + delete TEST_PTR(hanld); + } return 0; -} - +} \ No newline at end of file