code_production/code/base/test_base.cpp

786 lines
22 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include"test_base.h"
#include<string>
#include <stdio.h>
#include <windows.h>
#include <map>
#include <iostream>
#include "huagao/hgscanner_error.h"
static std::string StringToUtf(std::string strValue)
{
int nwLen = MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), -1, NULL, 0);
wchar_t* pwBuf = new wchar_t[nwLen + 1];//加上末尾'\0'
memset(pwBuf, 0, nwLen * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, strValue.c_str(), strValue.length(), pwBuf, nwLen);
int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char* pBuf = new char[nLen + 1];
memset(pBuf, 0, nLen + 1);
WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr = pBuf;
delete[]pBuf;
delete[]pwBuf;
return retStr;
}
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_ =L"";
class test
{
ui_helper* helper_;
int fw_;
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;
int 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)
{
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 io_type = false;
unsigned int io_len = 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;
wchar_t buf[128] = L"未检测到纸张倾斜,原因--->";
wcscat(buf, wstr.c_str());
wstr = buf;
}
else
type = true;
}
else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_CIS_ORIGINAL_IMAGE) == 0)
{
io_type = false;
h->io_control(IO_CTRL_CODE_SET_CIS_IMAGE, &io_type, &io_len);
}
else if (wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_DISTORTION) == 0)
{
int ret = h->io_control(IO_CTRL_CODE_GET_DPI_COLOR_CHECK_VAL, &io_type, &io_len);
if (strcmp((char*)data, STATU_DESC_SCAN_STOPPED) == 0)
{
h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_DISTORTION, (void*)L"畸变修正完成,是否进行单页扫描测试", type);
return 0;
}
}
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;
wchar_t buf[128] = L"未检测到双张,原因--->";
wcscat(buf, wstr.c_str());
wstr = buf;
}
else
type = true;
}
h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)wstr.c_str(), 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)
{
//std::string str = StringToUtf((char*)data);
//h->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_FALT_INFO, (void*)&str[0], 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_QUALITY) == 0
||wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_DISTORTION) == 0
|| wcscmp(set_test_name_.c_str(), HGPDTTOOLDB_NAME_SCANNING_SENSOR) == 0)
{
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_();
std::string fw1(get_firmware_version());
if (fw1.size() > 5)
{
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;
}
}
~test()
{}
struct ptrcmp
{
bool operator()(const wchar_t* NAME1, const wchar_t* NAME2)const
{
return wcscmp(NAME1, NAME2) < 0;
}
};
std::map<std::wstring, int(test::*)(void *)> 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;
}
int set_test(const wchar_t* str)
{
if (!str)
return SCANNER_ERR_NO_DATA;
set_test_name_ = str;
int ret = SCANNER_ERR_OK;
auto it = test_map_.find(str);
if (it != test_map_.end())
{
ret = (this->*test_map_[str])((void *)str);
}
else
{
helper_->test_callback(str, ui_helper::TEST_EVENT_NOT_FIND_TEST, NULL, false);
return ret;
}
if (ret != SCANNER_ERR_OK && ret != -1)
{
helper_->test_callback(str, ui_helper::TEST_EVENT_IO_FAIL, NULL, ret);
}
return ret;
}
public:
/*获取固件版本号*/
std::string 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_dial_switch(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 检查船型开关功能 */
int test_pocker_switch(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 设备上电并观察开机状态 */
int test_boot_status(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 检查液晶显示 */
int test_lcd_display(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 清理纸道功能确认 */
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);
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);
return ret;
}
/* 歪斜检测 */
int 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)
{
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
{
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_TEST_SINGLE, NULL, NULL);
return ret;
}
/* 分纸电机检测 */
int test_separater_motor(void *data)
{
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_TEST_SINGLE, NULL, NULL);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
return ret;
}
/* 主机风扇功能检测 */
int test_host_fan(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
{
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);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
ret = helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL);
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_TEST_SINGLE, NULL, NULL);
}
/* 开盖传感器检查 */
int test_cover_sensor(void *data) //端点返回 使用单张扫描测试
{
return helper_->io_control(IO_CTRL_CODE_TEST_SINGLE, NULL, NULL);
}
/* 扫描传感器检查 */
int test_scanning_sensor(void *data)
{
return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL);
}
/* 配置速度模式 */
int test_configure_speed_mode(void *data)
{
const wchar_t* NAME = set_test_name_.c_str();
unsigned int len = sizeof(int);
int speed_mode = 0;
void* get_data = NULL;
bool type = false;
ui_helper::_INFOTIPS info_;
const wchar_t *range=L"";
const wchar_t G139[6] = { 70,80,90,110};
const wchar_t G239[6] = { 100,110,120,130};
const wchar_t G300[6] = { 40,50,60,70 };
const wchar_t G400[6] = { 40,50,60,70,80};
const wchar_t *info = L"请设置速度模式,值越大速度越快.";
info_.info = info;
if (fw_ == 1)info_.desc = G139;
else if(fw_ == 2)info_.desc = G239;
else if(fw_ == 3)info_.desc = G300;
else if(fw_ == 4)info_.desc = G400;
parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_TIPS_VAL,NAME, (wchar_t *) &info_);
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;
}
speed_mode = *((int*)get_data);
if (fw_ == 3 || fw_ == 4 && speed_mode >= 40 && speed_mode <= 80)
{
for (size_t i = 0; i < sizeof(G400) / sizeof(G400[0]); i++)//3288设置速度模式为1 2 3 4 5
{
if (G400[i] == speed_mode)
{
speed_mode = i + 1;
break;
}
}
}
}
else
{
helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出--->设置速度模式...", false);
return -1;
}
ptr->release();
int ret = helper_->io_control(IO_CTRL_CODE_SET_SPEED_MODE, &speed_mode, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
SANE_Int num = 0;
unsigned int l = sizeof(SANE_Int);
ret = helper_->io_control(IO_CTRL_CODE_GET_SPEED_MODE, &num, &l);
int save_num = 0;
if (fw_ == 3 || fw_ == 4 && 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;
wchar_t* infocat = NULL;
wchar_t c[6];
if (num != speed_mode)
{
wchar_t buf[30] = L"设置速度模式失败...现在速度是:";
type = false;
wsprintfW(c, L"%dppm", save_num);
wcscat(buf, c);
infocat = buf;
}
else
{
wchar_t buf[30] = L"设置速度模式成功...现在速度是:";
type = true;
wsprintfW(c,L"%dppm", save_num);
wcscat(buf, c);
infocat = buf;
}
helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)infocat, type);
return SCANNER_ERR_OK;
}
/* 放置校正纸 */
int test_place_correction_paper(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 自动平场校正 */
int test_auto_flat_field(void *data)
{
return helper_->io_control(IO_CTRL_CODE_SET_AUTO_FALT, NULL, NULL);;
}
/* 重启设备 */
int test_reboot_device(void *data)
{
bool is_reboot = false;
void* get_data = NULL;
int i = 0;
unsigned int len = sizeof(SANE_Int);
parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_BOOL, set_test_name_.c_str(),L"是否进入烧录模式,是:进入烧写模式(rebootloader) 否:设备普通重启(reboot)");
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;
}
is_reboot = *((bool*)get_data);
}
else
{
helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT, (void*)L"已退出--->重启设备模式...", false);
return -1;
}
i = is_reboot;
int ret = helper_->io_control(IO_CTRL_CODE_SET_DEVS_REBOOT, &i, &len);
if (ret != SCANNER_ERR_OK)
return ret;
helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_DISTORTION, (void*)L"设备重启中,请观察设备是否重启", true);
return ret;
}
/* 扫描图像质量确认 */
int test_image_quality(void *data)
{
return helper_->io_control(IO_CTRL_CODE_GET_IMAGE, NULL, NULL);
}
/* 色卡纸成像质量评估 */
int test_colorcard_imageing_quality(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 色卡纸偏色成像质量评估 */
int test_colorcard_bias_imageing_quality(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 清晰度质量评估 */
int test_clarity_quality(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 畸变修正 */
int test_distortion(void *data)
{
const wchar_t* NAME = set_test_name_.c_str();
SANE_Bool type = true;
unsigned int len = sizeof(SANE_Bool);
return helper_->io_control(IO_CTRL_CODE_GET_DPI_COLOR_CHECK_VAL, &type, &len);
}
/* 设置休眠 */
int test_dormancy(void *data)
{
const wchar_t sleep_buf[10] = { 9999,5,10,30,60,120,240 };
ui_helper::_INFOTIPS info_;
void *get_data = NULL;
int sleep_time = 0;
SANE_Power power;
unsigned int len = sizeof(SANE_Power);
info_.desc = sleep_buf;
info_.info = L"9999:为不设置休眠,值越大休眠越久,单位是分钟";
parameter* ptr = helper_->get_user_input(ui_helper::DATA_FROM_USER, ui_helper::VAL_TYPE_TIPS_VAL, set_test_name_.c_str(), (wchar_t*)&info_);
if (ptr)
{
get_data = ptr->get_data();
if (get_data)
{
sleep_time = *((int*)get_data);
}
}
else
{
helper_->test_callback(set_test_name_.c_str(), ui_helper::TEST_EVENT_RESULT,(void*)L"已退出设置休眠模式",false);
return -1;
}
ptr->release();
for (size_t i = 0; i < 8; i++)
{
if (sleep_buf[i] == sleep_time)
{
power = (SANE_Power)i;
}
}
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 == 999999 || gettime == -1)
gettime = 9999;
else
gettime /= 60;
if (sleep_time == gettime)
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 ret;
}
/* 歪斜挡位检测 */
int test_skew_gear(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 分纸强度检测 */
int 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_mech_paper_feeding_inclination(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 单张测试1 */
int test_single_page_test_1(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 单张测试2 */
int test_single_page_test_2(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 单张测试3 */
int test_single_page_test_3(void *data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
/* 压力测试2轮 */
int test_pressuer_test(void *data)
{
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);
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;
}
private:
};
//test
static std::string jsontext1("{\"1\":{\"NAME\":\"test-8\",\"ver\":1}}");
bool have_img_ = false;
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)
{
if (!NAME || !oper || !helper)
{
return -1;
}
//helper->add_ref(void *data);
int ret = 0;
SANE_Bool type = false;
unsigned int len = sizeof(SANE_Bool);
test ts(helper);
ret = ts.set_test(NAME);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
ret = helper->io_control(IO_CTRL_CODE_RESTORE_SETTINGS, NULL, NULL);//结束恢复默认
return ret;
}
DECL_API(int) func_test_uninit(void* uninit)
{
return 0;
}