调整设置畸变

This commit is contained in:
13038267101 2023-01-05 18:18:38 +08:00
parent f5521cbd5a
commit f692b92e7a
15 changed files with 159 additions and 47 deletions

View File

@ -3416,9 +3416,21 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
{ {
return start();; return start();;
} }
else if (code == IO_CTRL_CODE_GET_DPI_COLOR_CHECK_VAL) else if (code == IO_CTRL_CODE_SET_DISTORTION_IMAGE)
{ {
return set_dpi_color_check(*((bool*)data)); return set_distortion_image(*((bool*)data));
}
else if(code == IO_CTRL_CODE_GET_DISTORTION_CHECK_VAL)
{
return get_distortion_check_val(*((int*)data));
}
else if(code == IO_CTRL_CODE_SET_DISTORTION_CHECK_VAL)
{
return set_distortion_check_val(*((int*)data));
}
else if (code == IO_CTRL_CODE_GET_DISTORTION_DEVS_CHECK_VAL)
{
return get_devs_distortion_check_val(*((int*)data));
} }
else if(code == IO_CTRL_CODE_SET_DEVS_REBOOT) else if(code == IO_CTRL_CODE_SET_DEVS_REBOOT)
{ {
@ -3444,6 +3456,7 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
} }
else if (code == IO_CTRL_CODE_SET_SERIAL) else if (code == IO_CTRL_CODE_SET_SERIAL)
{ {
string str = (char*)data;
return set_serial_num((char*)data); return set_serial_num((char*)data);
} }
else if (code == IO_CTRL_CODE_GET_VIDPID) else if (code == IO_CTRL_CODE_GET_VIDPID)
@ -3532,7 +3545,7 @@ int hg_scanner::get_speed_mode(int& data)
return SCANNER_ERR_DEVICE_NOT_SUPPORT; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
int hg_scanner::set_dpi_color_check(bool type) int hg_scanner::set_distortion_image(bool type)
{ {
is_dpi_color_check = type; is_dpi_color_check = type;
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -3542,7 +3555,22 @@ int hg_scanner::set_dpi_color_check(bool type)
} }
return ret; return ret;
} }
int hg_scanner::set_dpi_color_check_val(void) int hg_scanner::get_distortion_check_val(int &val)
{
val = *(int*)&save_dpi_color_check_val;
//val = ;
if (val != 0)
{
return SCANNER_ERR_NO_DATA;
}
return 0;
}
int hg_scanner::set_distortion_check_val(int data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner::get_devs_distortion_check_val(int& data)
{ {
return SCANNER_ERR_DEVICE_NOT_SUPPORT; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
@ -3668,7 +3696,6 @@ void hg_scanner::image_process(std::shared_ptr<tiny_buffer>& buffer)
err = hg_imgproc::cis_test_image(ImagePrc_pHandle_, res); err = hg_imgproc::cis_test_image(ImagePrc_pHandle_, res);
save_dpi_color_check_val = res.scaleXY1; save_dpi_color_check_val = res.scaleXY1;
is_dpi_color_check = false; is_dpi_color_check = false;
set_dpi_color_check_val();
} }
else if (param.cis_image) else if (param.cis_image)
{ {

View File

@ -336,7 +336,7 @@ protected:
int fold_type_; //对折类型 int fold_type_; //对折类型
bool is_cis_image; //设置cis获取原图 bool is_cis_image; //设置cis获取原图
bool is_dpi_color_check; //纵向DPI、色差检测 ,畸变自动计算 bool is_dpi_color_check; //纵向DPI、色差检测 ,畸变自动计算
double save_dpi_color_check_val; //保存纵向DPI、色差检测 ,畸变自动计算 的值 float save_dpi_color_check_val; //保存纵向DPI、色差检测 ,畸变自动计算 的值
bool is_auto_falt; //是否进行平场校正 bool is_auto_falt; //是否进行平场校正
int split3399_; //3399设备正面和反面图像是相对的所以对折时反面需要进行特殊处理 int split3399_; //3399设备正面和反面图像是相对的所以对折时反面需要进行特殊处理
@ -482,9 +482,11 @@ public:
virtual int set_speed_mode(int data) = 0; //设置速度模式 /*/ 设备不同值不同,详情见子类注释 virtual int set_speed_mode(int data) = 0; //设置速度模式 /*/ 设备不同值不同,详情见子类注释
virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释 virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释
virtual int set_dpi_color_check(bool type); //获取畸变矫正 /*/ 基类处理 virtual int set_distortion_image(bool type); //设置畸变校正图 /*/ 基类处理
virtual int get_distortion_check_val(int &val); //获取畸变校正指 /*/ 基类处理
virtual int set_distortion_check_val(int data) = 0; //设置畸变矫正值 int to float;
virtual int get_devs_distortion_check_val(int& data); //获取设备畸变值 float to int;
virtual int set_dpi_color_check_val(void) = 0; //设置畸变矫正值
virtual int set_auto_flat(void) = 0; //设置自动平场校正 virtual int set_auto_flat(void) = 0; //设置自动平场校正
}; };

View File

@ -926,7 +926,7 @@ int hg_scanner_200::get_speed_mode(int& data)
return SCANNER_ERR_DEVICE_NOT_SUPPORT; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
int hg_scanner_200::set_dpi_color_check_val(void) int hg_scanner_200::set_distortion_check_val(int data)
{ {
return SCANNER_ERR_DEVICE_NOT_SUPPORT; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }

View File

@ -102,6 +102,6 @@ public:
virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/ virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ 不支持 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ 不支持
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支持 virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支持
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正 virtual int set_distortion_check_val(int data) override; //设置畸变矫正
virtual int set_auto_flat(void); //设置自动平场校正 virtual int set_auto_flat(void); //设置自动平场校正
}; };

View File

@ -269,7 +269,7 @@ int hg_scanner_239::get_speed_mode(int& data)
{ {
return read_register(setting3399::SR_GET_SPEEDMODE, &data); return read_register(setting3399::SR_GET_SPEEDMODE, &data);
} }
int hg_scanner_239::set_dpi_color_check_val(void) int hg_scanner_239::set_distortion_check_val(int data)
{ {
setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_H_200_RATIO; setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_H_200_RATIO;
if (resolution_ <= 200) if (resolution_ <= 200)
@ -279,7 +279,7 @@ int hg_scanner_239::set_dpi_color_check_val(void)
else if (resolution_ > 300 && resolution_ <= 600) else if (resolution_ > 300 && resolution_ <= 600)
ratio = setting3399::SR_SET_H_600_RATIO; ratio = setting3399::SR_SET_H_600_RATIO;
return write_register(ratio, *(int*)&save_dpi_color_check_val); return write_register(ratio, data);
} }
int hg_scanner_239::get_dpi_color_check_val(int &data) int hg_scanner_239::get_dpi_color_check_val(int &data)
{ {
@ -926,7 +926,65 @@ int hg_scanner_239::on_scanner_closing(bool force)
{ {
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
void hg_scanner_239::thread_handle_usb_read(void) void hg_scanner_239::thread_correction(void)
{
StopWatch sw;
char buf[64];
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
int size = sizeof(buf),
ret = SCANNER_ERR_OK;
while (run_)
{
size = sizeof(buf);
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->read_interrupt(buf, &size);
io_->set_timeout(1000);
printf("size:%d\r\n",size);
}
if (ret == SCANNER_ERR_TIMEOUT)
{
if (sw.elapsed_s() == 60)
{
status_ = ret;
notify_ui_working_status(" \350\256\276\345\244\207\346\240\241\346\255\243\350\266\205\346\227\266", SANE_EVENT_ERROR, ret); // 通信超时
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "设备校正超时 '%s'\n", hg_scanner_err_name(status_));
break;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
if (size == sizeof(buf))
{
if (setting3399::AutoCorrect ==info->From)
{
status_ == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
sw.reset();
std::string sinfo;
int len = info->Img_Index;
sinfo.resize(len);
io_->read_bulk(&sinfo[0],&len);
char buf[1024];
strcpy(buf, sinfo.c_str());
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
printf("%s\r\n", sinfo.c_str());
if (info->Code == 4)
{
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
return;
}
break;
}
}
this_thread::sleep_for(chrono::milliseconds(10));
}
}
void hg_scanner_239::thread_get_dves_image(void)
{ {
char buf[64]; char buf[64];
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf; setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
@ -937,7 +995,7 @@ void hg_scanner_239::thread_handle_usb_read(void)
int auoto_paper_indx = 0; int auoto_paper_indx = 0;
//status_ = SCANNER_ERR_DEVICE_BUSY; //status_ = SCANNER_ERR_DEVICE_BUSY;
while (run_ )//&& !user_cancel_ while (run_)//&& !user_cancel_
{ {
size = sizeof(buf); size = sizeof(buf);
{ {
@ -955,7 +1013,7 @@ void hg_scanner_239::thread_handle_usb_read(void)
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "600dpi '%s'\n", hg_scanner_err_name(status_)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "600dpi '%s'\n", hg_scanner_err_name(status_));
break; break;
} }
else if (img_conf_.resolution_dst != 600.0 &&++to_cnt > 20 && !is_auto_paper_scan) else if (img_conf_.resolution_dst != 600.0 && ++to_cnt > 20 && !is_auto_paper_scan)
{ {
status_ = ret; status_ = ret;
notify_ui_working_status("\351\200\232\344\277\241\350\266\205\346\227\266", SANE_EVENT_ERROR, ret); // 通信超时 notify_ui_working_status("\351\200\232\344\277\241\350\266\205\346\227\266", SANE_EVENT_ERROR, ret); // 通信超时
@ -1004,7 +1062,7 @@ void hg_scanner_239::thread_handle_usb_read(void)
std::this_thread::sleep_for(std::chrono::milliseconds(30)); std::this_thread::sleep_for(std::chrono::milliseconds(30));
StopWatch delay; StopWatch delay;
if((double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG) && st == SCANNER_ERR_DEVICE_DOUBLE_FEEDING) if ((double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG) && st == SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
{ {
int wait = 3000 + (img_conf_.resolution_dst / 200 * 10000); int wait = 3000 + (img_conf_.resolution_dst / 200 * 10000);
while (get_image_count() == 0) while (get_image_count() == 0)
@ -1109,8 +1167,8 @@ void hg_scanner_239::thread_handle_usb_read(void)
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "Really stopped ^_^\n"); LOG_INFO(LOG_LEVEL_DEBUG_INFO, "Really stopped ^_^\n");
//string str = "当前批次扫描完成(第"+to_string(++auoto_paper_indx)+"批)"; //string str = "当前批次扫描完成(第"+to_string(++auoto_paper_indx)+"批)";
string str = "\345\275\223\345\211\215\346\211\271\346\254\241\346\211\253\346\217\217\345\256\214\346\210\220(\347\254\254"+to_string(++auoto_paper_indx)+"\346\211\271)"; string str = "\345\275\223\345\211\215\346\211\271\346\254\241\346\211\253\346\217\217\345\256\214\346\210\220(\347\254\254" + to_string(++auoto_paper_indx) + "\346\211\271)";
if(is_auto_paper_scan) if (is_auto_paper_scan)
notify_ui_working_status(str.c_str(), SANE_EVENT_STATUS, status_); notify_ui_working_status(str.c_str(), SANE_EVENT_STATUS, status_);
else else
break; break;
@ -1158,6 +1216,13 @@ void hg_scanner_239::thread_handle_usb_read(void)
} }
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_name(status_)); VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_name(status_));
} }
void hg_scanner_239::thread_handle_usb_read(void)
{
if (is_auto_falt)
thread_correction();
else
thread_get_dves_image();
}
int hg_scanner_239::start(void) int hg_scanner_239::start(void)
{ {

View File

@ -43,8 +43,9 @@ class hg_scanner_239 : public hg_scanner
bool is_dev_image_process_done(void); bool is_dev_image_process_done(void);
bool is_dev_image_keep_last_paper(void); bool is_dev_image_keep_last_paper(void);
void discard_all_images(void); void discard_all_images(void);
void init_version(void void init_version(void);
); void thread_get_dves_image(void);
void thread_correction(void);
protected: protected:
virtual void on_device_reconnected(void) override; virtual void on_device_reconnected(void) override;
virtual int on_scanner_closing(bool force) override; virtual int on_scanner_closing(bool force) override;
@ -119,7 +120,7 @@ public:
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:100,110,120 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:100,110,120
virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:100,110,120 virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:100,110,120
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正值 virtual int set_distortion_check_val(int data) override; //设置畸变矫正值
virtual int get_dpi_color_check_val(int &data); //获取畸变矫正 virtual int get_dpi_color_check_val(int &data); //获取畸变矫正
virtual int set_auto_flat(void); //设置自动平场校正 virtual int set_auto_flat(void); //设置自动平场校正
}; };

View File

@ -837,11 +837,11 @@ int hg_scanner_300::get_speed_mode(int& data)
} }
return ret; return ret;
} }
int hg_scanner_300::set_dpi_color_check_val(void) int hg_scanner_300::set_distortion_check_val(int data)
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 0; len = 0;
USBCB usbcb = { setting3288dsp::SET_JUST_COF_V ,save_dpi_color_check_val,resolution_ }; USBCB usbcb = { setting3288dsp::SET_JUST_COF_V ,data,resolution_ };
len = sizeof(usbcb); len = sizeof(usbcb);
io_->write_bulk(&usbcb, &len); io_->write_bulk(&usbcb, &len);
@ -852,6 +852,22 @@ int hg_scanner_300::set_dpi_color_check_val(void)
//int ratio = cmd.u32_Data; //int ratio = cmd.u32_Data;
return ret; return ret;
} }
int hg_scanner_300::get_devs_distortion_check_val(int& data)
{
int ret = SCANNER_ERR_OK,
len = 0;
USBCB usbcb = { setting3288dsp::GET_JUST_COF_V ,0,resolution_ };
ret = io_->write_bulk(&usbcb, &len);
if (ret == SCANNER_ERR_OK)
{
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
io_->set_timeout(3000);
ret = io_->read_bulk(&usbcb, &len);
data = usbcb.u32_Data;
}
return ret;
}
int hg_scanner_300::set_auto_flat(void) int hg_scanner_300::set_auto_flat(void)
{ {
USBCB usbcb = { setting3288dsp::START_FLAT,0,0 }; USBCB usbcb = { setting3288dsp::START_FLAT,0,0 };

View File

@ -103,7 +103,8 @@ public:
virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁* virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70
virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70 virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正 virtual int set_distortion_check_val(int data) override; //设置畸变矫正
virtual int get_devs_distortion_check_val(int& data)override;//获取设备畸变值 float to int;
virtual int set_auto_flat(void)override; //设置自动平场校正 virtual int set_auto_flat(void)override; //设置自动平场校正
}; };

View File

@ -1282,7 +1282,7 @@ int hg_scanner_302::get_speed_mode(int& data)
{ {
return read_register(setting3399::SR_SET_SPEEDMODE, &data); return read_register(setting3399::SR_SET_SPEEDMODE, &data);
} }
int hg_scanner_302::set_dpi_color_check_val(void) int hg_scanner_302::set_distortion_check_val(int data)
{ {
setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO; setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO;
if (resolution_ <= 200) if (resolution_ <= 200)

View File

@ -125,6 +125,6 @@ public:
virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/ virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70
virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70 virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正 virtual int set_distortion_check_val(int data) override; //设置畸变矫正
virtual int set_auto_flat(void) override; //设置自动平场校正 virtual int set_auto_flat(void) override; //设置自动平场校正
}; };

View File

@ -879,11 +879,11 @@ int hg_scanner_400::get_speed_mode(int& data)
} }
return ret; return ret;
} }
int hg_scanner_400::set_dpi_color_check_val(void) int hg_scanner_400::set_distortion_check_val(int data)
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 0; len = 0;
USBCB usbcb = { setting3288dsp::SET_JUST_COF_H ,1,resolution_ }; USBCB usbcb = { setting3288dsp::SET_JUST_COF_H ,data,resolution_ };
len = sizeof(usbcb); len = sizeof(usbcb);
io_->write_bulk(&usbcb, &len); io_->write_bulk(&usbcb, &len);

View File

@ -107,6 +107,6 @@ public:
virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁* virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,7080 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,7080
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,7080 virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,7080
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正 virtual int set_distortion_check_val(int data) override; //设置畸变矫正
virtual int set_auto_flat(void); //设置自动平场校正 virtual int set_auto_flat(void); //设置自动平场校正
}; };

View File

@ -1242,7 +1242,7 @@ int hg_scanner_402::get_speed_mode(int& data)
{ {
return read_register(setting3399::SR_SET_SPEEDMODE, &data); return read_register(setting3399::SR_SET_SPEEDMODE, &data);
} }
int hg_scanner_402::set_dpi_color_check_val(void) int hg_scanner_402::set_distortion_check_val(int data)
{ {
setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO; setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO;
if (resolution_ <= 200) if (resolution_ <= 200)
@ -1252,7 +1252,7 @@ int hg_scanner_402::set_dpi_color_check_val(void)
else if (resolution_ > 300 && resolution_ <= 600) else if (resolution_ > 300 && resolution_ <= 600)
retio = setting3399::SR_SET_H_600_RATIO; retio = setting3399::SR_SET_H_600_RATIO;
return write_register(retio, *(int*)&save_dpi_color_check_val); return write_register(retio, data);
} }
int hg_scanner_402::set_auto_flat(void) int hg_scanner_402::set_auto_flat(void)
{ {

View File

@ -125,6 +125,6 @@ public:
virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/ virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,7080 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,7080
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,7080 virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,7080
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正 virtual int set_distortion_check_val(int data) override; //设置畸变矫正
virtual int set_auto_flat(void) override; //设置自动平场校正 virtual int set_auto_flat(void) override; //设置自动平场校正
}; };

View File

@ -61,7 +61,7 @@ g_supporting_devices[] = {
#else #else
{0x3072, PID_AND_NAME(100, SCANNER_NAME_HG_G100), "G100", "", &hg_scanner_mgr::create_scanner_g100} {0x3072, PID_AND_NAME(100, SCANNER_NAME_HG_G100), "G100", "", &hg_scanner_mgr::create_scanner_g100}
, {0x3072, PID_AND_NAME(139, SCANNER_NAME_HG_G100), "G100", "", &hg_scanner_mgr::create_scanner_g239} , {0x3072, PID_AND_NAME(139, SCANNER_NAME_HG_G100), "G100", "", &hg_scanner_mgr::create_scanner_g239}
, {0x3072, PID_AND_NAME(200, SCANNER_NAME_HG_G200), "G200", "", &hg_scanner_mgr::create_scanner_g100} , {0x3072, PID_AND_NAME(200, SCANNER_NAME_HG_G200), "G200", "", &hg_scanner_mgr::create_scanner_g239}
, {0x3072, PID_AND_NAME(239, SCANNER_NAME_HG_G200), "G200", "", &hg_scanner_mgr::create_scanner_g239} , {0x3072, PID_AND_NAME(239, SCANNER_NAME_HG_G200), "G200", "", &hg_scanner_mgr::create_scanner_g239}
, {0x3072, PID_AND_NAME(300, SCANNER_NAME_HG_G300), "G300", "", &hg_scanner_mgr::create_scanner_g300} , {0x3072, PID_AND_NAME(300, SCANNER_NAME_HG_G300), "G300", "", &hg_scanner_mgr::create_scanner_g300}
, {0x3072, PID_AND_NAME(302, SCANNER_NAME_HG_G300), "G300", "", &hg_scanner_mgr::create_scanner_g302} , {0x3072, PID_AND_NAME(302, SCANNER_NAME_HG_G300), "G300", "", &hg_scanner_mgr::create_scanner_g302}