2022-05-03 03:56:07 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
// hg_scanner is the base class of kinds of scanners
|
|
|
|
|
//
|
|
|
|
|
// created on 2022-01-30
|
|
|
|
|
//
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
#include <mutex>
|
|
|
|
|
#include <thread>
|
|
|
|
|
|
|
|
|
|
#include "usb_manager.h"
|
|
|
|
|
#include "../../sdk/hginclude/huagaoxxx_warraper_ex.h"
|
|
|
|
|
#include "jsonconfig.h"
|
|
|
|
|
#include "../3rdparty/nick/StopWatch.h"
|
|
|
|
|
#include "hg_ipc.h"
|
|
|
|
|
#include "common_setting.h"
|
|
|
|
|
#include "image_process.h"
|
|
|
|
|
#include "StopWatch.h"
|
2022-05-06 05:37:14 +00:00
|
|
|
|
#include "PaperSize.h"
|
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
#ifdef WIN32
|
|
|
|
|
#else
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
#endif
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
HG_BASE_SETTING_INDEX_RESTORE_DEFAULT_SETTINGS = 0, // 恢复默认设置
|
|
|
|
|
HG_BASE_SETTING_INDEX_HELP, // 帮助
|
2022-05-09 08:59:22 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_MULTI_OUT, // 多流输出
|
2022-05-21 08:56:14 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_MULTI_OUT_TYPE, // 多流输出类型
|
|
|
|
|
HG_BASE_SETTING_INDEX_COLOR_MODE, // 颜色模式
|
2022-06-28 08:37:45 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_BLACK_WGITE_THRESHOLD, // 黑白图像阈值
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_ERASE_COLOR, // 除色
|
|
|
|
|
HG_BASE_SETTING_INDEX_ERASE_MULTI_OUT_RED, // 多流输出除红
|
|
|
|
|
HG_BASE_SETTING_INDEX_ERASE_ANSWER_RED, // 答题卡除红
|
|
|
|
|
HG_BASE_SETTING_INDEX_ERASE_BACKGROUND, // 移除背景
|
|
|
|
|
HG_BASE_SETTING_INDEX_ERASE_BACKGROUND_RANGE, // 移除背景范围
|
|
|
|
|
HG_BASE_SETTING_INDEX_NOISE_OPTIMIZE, // 黑白图像噪点优化
|
|
|
|
|
HG_BASE_SETTING_INDEX_NOISE_OPTIMIZE_SIZE, // 噪点优化尺寸
|
|
|
|
|
HG_BASE_SETTING_INDEX_PAPER, // 纸张尺寸
|
|
|
|
|
HG_BASE_SETTING_INDEX_PAPER_SIZE_CHECK, // 尺寸检测
|
2022-05-06 05:37:14 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_IS_CUSTOM_AREA, // 是否启用自定义区域
|
|
|
|
|
HG_BASE_SETTING_INDEX_CUSTOM_AREA_LEFT, // 自定义区域左侧(mm)
|
|
|
|
|
HG_BASE_SETTING_INDEX_CUSTOM_AREA_RIGHT, // 自定义区域右侧(mm)
|
|
|
|
|
HG_BASE_SETTING_INDEX_CUSTOM_AREA_TOP, // 自定义区域上侧(mm)
|
|
|
|
|
HG_BASE_SETTING_INDEX_CUSTOM_AREA_BOTTOM, // 自定义区域下侧(mm)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_PAGE, // 扫描页面
|
|
|
|
|
HG_BASE_SETTING_INDEX_PAGE_OMIT_EMPTY_LEVEL, // 跳过空白页灵敏度
|
2022-05-09 07:02:00 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_RESOLUTION, // 分辨率
|
|
|
|
|
HG_BASE_SETTING_INDEX_IMG_QUALITY, // 图像质量
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_EXCHANGE, // 交换正反面
|
|
|
|
|
HG_BASE_SETTING_INDEX_SPLIT, // 图像拆分
|
|
|
|
|
HG_BASE_SETTING_INDEX_AUTO_CORRECT, // 自动纠偏
|
|
|
|
|
HG_BASE_SETTING_INDEX_RID_HOLE, // 穿孔移除
|
2022-06-28 06:39:29 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_RID_HOLE_RANGE, // 穿孔搜索范围占幅面比例
|
2022-05-06 05:37:14 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_IS_CUSTOM_GAMMA, // 是否启用自定义伽玛
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_BRIGHT, // 亮度
|
|
|
|
|
HG_BASE_SETTING_INDEX_CONTRAST, // 对比度
|
|
|
|
|
HG_BASE_SETTING_INDEX_GAMMA, // 伽玛
|
2022-05-06 05:37:14 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_CUSTOM_GAMMA_DATA, // 自定义伽玛数据
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_SHARPEN, // 锐化与模糊
|
|
|
|
|
HG_BASE_SETTING_INDEX_DARK_SAMPLE, // 深色样张
|
|
|
|
|
HG_BASE_SETTING_INDEX_ERASE_BLACK_FRAME, // 消除黑框
|
|
|
|
|
HG_BASE_SETTING_INDEX_THRESHOLD, // 阈值
|
|
|
|
|
HG_BASE_SETTING_INDEX_ANTI_NOISE_LEVEL, // 背景抗噪等级
|
|
|
|
|
HG_BASE_SETTING_INDEX_MARGIN, // 边缘缩进
|
|
|
|
|
HG_BASE_SETTING_INDEX_FILL_BACKGROUND, // 背景填充方式
|
|
|
|
|
HG_BASE_SETTING_INDEX_PERMEATE, // 防止渗透
|
2022-05-20 07:53:40 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_PERMEATE_LV, // 防止渗透等级
|
|
|
|
|
HG_BASE_SETTING_INDEX_COLOR_FILL, // 色彩填充
|
2022-05-09 08:59:22 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_REMOVE_MORR, // 去除摩尔纹
|
|
|
|
|
HG_BASE_SETTING_INDEX_ERROR_EXTENTION, // 错误扩散
|
|
|
|
|
HG_BASE_SETTING_INDEX_REMOVE_TXTTURE, // 除网纹
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_ULTRASONIC_CHECK, // 超声波检测
|
|
|
|
|
HG_BASE_SETTING_INDEX_STAPLE_CHECK, // 装订检测
|
|
|
|
|
HG_BASE_SETTING_INDEX_SCAN_MODE, // 连续扫描或扫描指定张数
|
2022-06-28 06:39:29 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_SCAN_COUNT, // 扫描张数
|
2022-05-03 03:56:07 +00:00
|
|
|
|
HG_BASE_SETTING_INDEX_TEXT_DIRECTION, // 文稿方向
|
|
|
|
|
HG_BASE_SETTING_INDEX_ROTATE_BKG_180, // 背面旋转180°
|
|
|
|
|
HG_BASE_SETTING_INDEX_FRACTATE_CHECK, // 折角检测
|
|
|
|
|
HG_BASE_SETTING_INDEX_FRACTATE_CHECK_LEVEL, // 折角检测复杂度
|
|
|
|
|
HG_BASE_SETTING_INDEX_SKEW_CHECK, // 歪斜检测
|
|
|
|
|
HG_BASE_SETTING_INDEX_SKEW_CHECK_LEVEL, // 歪斜检测复杂度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 常规的功能索引声明必须在此之前
|
|
|
|
|
HG_BASE_SETTING_INDEX_MAX,
|
|
|
|
|
};
|
2022-05-09 08:59:22 +00:00
|
|
|
|
#define MAPPING_FUNCTION_IN_BASE // 定义该标志,各子类不必再初始化setting_map_数组
|
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
#ifdef OEM_HANWANG
|
|
|
|
|
#define hg_scanner hw_scanner
|
|
|
|
|
#elif defined(OEM_LISICHENG)
|
|
|
|
|
#define hg_scanner lsc_scanner
|
|
|
|
|
#endif
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
class hg_scanner
|
|
|
|
|
{
|
|
|
|
|
bool notify_setting_result_;
|
|
|
|
|
std::string name_;
|
2022-06-02 03:47:44 +00:00
|
|
|
|
std::string save_multiout; //保存多留输出类型
|
2022-06-08 10:33:49 +00:00
|
|
|
|
bool save_sizecheck;
|
2022-06-14 09:02:19 +00:00
|
|
|
|
int is_color_type_;//保存最后下发到设备的颜色类型
|
2022-05-03 03:56:07 +00:00
|
|
|
|
sane_callback ui_ev_cb_;
|
|
|
|
|
do_when_born_and_dead<hg_scanner>* scan_life_;
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<std::thread> thread_usb_read_;
|
|
|
|
|
void thread_handle_usb(void);
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<std::thread> thread_img_handle_;
|
|
|
|
|
void thread_image_handle(void);
|
|
|
|
|
|
|
|
|
|
void get_range(int setting_no, std::vector<std::string>& range, std::string& def_val, bool& is_range/*range or list*/);
|
|
|
|
|
bool check_range(int setting_no, bool& val);
|
|
|
|
|
bool check_range(int setting_no, int& val);
|
|
|
|
|
bool check_range(int setting_no, double& val);
|
|
|
|
|
bool check_range(int setting_no, std::string& val);
|
|
|
|
|
int restore(int setting_no);
|
|
|
|
|
bool get_default_value(void* buf, json* jsn);
|
|
|
|
|
bool is_to_file(void);
|
|
|
|
|
void thread_handle_image_process(void);
|
|
|
|
|
|
|
|
|
|
void working_begin(void*);
|
|
|
|
|
void working_done(void*);
|
|
|
|
|
|
2022-05-06 05:37:14 +00:00
|
|
|
|
void reset_custom_area_range(int paper);
|
2022-06-14 09:02:19 +00:00
|
|
|
|
int set_color_change(void);
|
2022-05-06 05:37:14 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
// 设置接口
|
|
|
|
|
protected:
|
|
|
|
|
|
2022-05-09 08:59:22 +00:00
|
|
|
|
// 配置序号映射数组,各子类必须重载“init_setting_map”方法以初始化该数组 --> 2022-05-09:基类中以title自动匹配功能序号,子类不必再处理并屏蔽此项工作
|
2022-05-03 03:56:07 +00:00
|
|
|
|
// 比如: 某型设备的“颜色模式”功能号为1,则 setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = 1
|
|
|
|
|
// 如果设备的“颜色模式”配置逻辑与基类预定义的不同,
|
|
|
|
|
// 则 setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = -1,在子类重载的set_setting_value方法中处理
|
|
|
|
|
int setting_map_[HG_BASE_SETTING_INDEX_MAX];
|
|
|
|
|
virtual void init_setting_map(int* setting_map, int count);
|
2022-05-09 08:59:22 +00:00
|
|
|
|
void set_setting_map(int sn, const char* title);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
int setting_restore(void* data);
|
|
|
|
|
int setting_help(void* data);
|
|
|
|
|
int setting_color_mode(void* data);
|
|
|
|
|
|
|
|
|
|
int setting_multi_out(void *data);
|
2022-05-21 08:56:14 +00:00
|
|
|
|
int setting_multi_out_type(void *data);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
int setting_rid_color(void* data);
|
|
|
|
|
int setting_rid_multi_red(void* data);
|
|
|
|
|
int setting_rid_answer_red(void* data);
|
|
|
|
|
int setting_erase_background(void* data);
|
|
|
|
|
int setting_erase_background_range(void* data);
|
|
|
|
|
int setting_noise_optimize(void* data);
|
|
|
|
|
int setting_noise_optimize_range(void* data);
|
|
|
|
|
int setting_paper(void* data);
|
|
|
|
|
int setting_paper_check(void* data);
|
|
|
|
|
int setting_page(void* data);
|
|
|
|
|
int setting_page_omit_empty(void* data);
|
|
|
|
|
int setting_resolution(void* data);
|
|
|
|
|
int setting_exchagnge(void* data);
|
|
|
|
|
int setting_split_image(void* data);
|
|
|
|
|
int setting_automatic_skew(void* data);
|
|
|
|
|
int setting_rid_hole(void* data);
|
|
|
|
|
int setting_rid_hoe_range(void* data);
|
|
|
|
|
int setting_bright(void* data);
|
|
|
|
|
int setting_contrast(void* data);
|
|
|
|
|
int setting_gamma(void* data);
|
|
|
|
|
int setting_sharpen(void* data);
|
|
|
|
|
int setting_dark_sample(void* data);
|
|
|
|
|
int setting_erase_black_frame(void* data);
|
|
|
|
|
int setting_threshold(void* data);
|
|
|
|
|
int setting_anti_noise(void* data);
|
|
|
|
|
int setting_margin(void* data);
|
|
|
|
|
int setting_filling_background(void* data);
|
|
|
|
|
int setting_is_permeate(void *data);
|
|
|
|
|
int setting_is_permeate_lv(void *data);
|
|
|
|
|
int setting_remove_morr(void* data);
|
|
|
|
|
int setting_error_extention(void* data);
|
|
|
|
|
int setting_remove_texture(void* data);
|
|
|
|
|
int setting_ultrasonic_check(void* data);
|
|
|
|
|
int setting_staple_check(void* data);
|
|
|
|
|
int setting_scan_mode(void* data);
|
|
|
|
|
int setting_scan_count(void* data);
|
|
|
|
|
int setting_text_direction(void* data);
|
|
|
|
|
int setting_rotate_bkg_180(void* data);
|
|
|
|
|
int setting_fractate_check(void* data);
|
|
|
|
|
int setting_fractate_check_level(void* data);
|
|
|
|
|
int setting_skew_check(void* data);
|
|
|
|
|
int setting_skew_check_level(void* data);
|
2022-05-06 05:37:14 +00:00
|
|
|
|
int setting_is_custom_gamma(void* data);
|
|
|
|
|
int setting_custom_gamma_data(void* data);
|
|
|
|
|
int setting_is_custom_area(void* data);
|
|
|
|
|
int setting_custom_area_left(void* data);
|
|
|
|
|
int setting_custom_area_top(void* data);
|
|
|
|
|
int setting_custom_area_right(void* data);
|
|
|
|
|
int setting_custom_area_bottom(void* data);
|
2022-05-09 07:02:00 +00:00
|
|
|
|
int setting_img_quality(void *data);
|
2022-05-20 07:53:40 +00:00
|
|
|
|
int setting_color_fill(void *data);
|
2022-06-28 08:37:45 +00:00
|
|
|
|
int setting_black_white_threshold(void *data);
|
2022-05-06 05:37:14 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
virtual int on_color_mode_changed(int& color_mode); // COLOR_MODE_xxx
|
|
|
|
|
virtual int on_paper_changed(int& paper); // PAPER_xxx
|
|
|
|
|
virtual int on_paper_check_changed(bool& check);
|
|
|
|
|
virtual int on_resolution_changed(int& dpi);
|
|
|
|
|
virtual int on_ultrasonic_check_changed(bool& check);
|
|
|
|
|
virtual int on_staple_check_changed(bool& check);
|
|
|
|
|
virtual int on_skew_check_changed(bool& check);
|
|
|
|
|
virtual int on_skew_check_level_changed(int& check);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void on_device_reconnected(void);
|
|
|
|
|
virtual int set_setting_value(int setting_no, void* data, int len);
|
|
|
|
|
virtual int on_scanner_closing(bool force);
|
|
|
|
|
virtual void thread_handle_usb_read(void) = 0;
|
2022-06-01 03:04:10 +00:00
|
|
|
|
virtual void image_process(std::shared_ptr<tiny_buffer>& buff) = 0;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
volatile bool run_;
|
|
|
|
|
volatile bool user_cancel_;
|
|
|
|
|
platform_event wait_usb_;
|
|
|
|
|
platform_event wait_img_;
|
2022-05-23 03:52:53 +00:00
|
|
|
|
platform_event wait_usb_result_;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
usb_io* io_;
|
|
|
|
|
std::mutex io_lock_;
|
|
|
|
|
bool online_;
|
|
|
|
|
int status_;
|
|
|
|
|
bool async_io_;
|
|
|
|
|
bool cb_mem_;
|
|
|
|
|
bool test_1_paper_; // 是否为单张扫描模式
|
|
|
|
|
json setting_jsn_;
|
|
|
|
|
int setting_count_;
|
|
|
|
|
|
|
|
|
|
IMGPRCFIXPARAM image_prc_param_;
|
|
|
|
|
int erase_bkg_range_; // 背景移除像素范围
|
|
|
|
|
int noise_range_; // 噪点优化尺寸
|
|
|
|
|
TwSS paper_size_;
|
|
|
|
|
int omit_empty_level_; // 跳过空白页灵敏度
|
|
|
|
|
int resolution_; // 分辨率
|
|
|
|
|
double rid_hole_range_; // 穿孔移除范围
|
|
|
|
|
int bright_; // 亮度
|
|
|
|
|
int contrast_; // 对比度
|
|
|
|
|
double gamma_; // 伽玛
|
|
|
|
|
int threshold_; // 阈值
|
|
|
|
|
int anti_noise_; // 背景搞噪等级
|
|
|
|
|
int margin_; // 边缘缩进
|
|
|
|
|
int fractate_level_; // 折角检测复杂度
|
|
|
|
|
int scan_count_; // 扫描张数,各实例化类在重载set_setting_value中,如果发现该设置项对该参数有影响时,需要对此值作更改
|
|
|
|
|
bool is_auto_matic_color;// 自动颜色识别
|
2022-05-20 07:53:40 +00:00
|
|
|
|
int is_quality_; // 画质设置
|
|
|
|
|
bool is_color_fill; // 色彩填充
|
2022-05-21 08:56:14 +00:00
|
|
|
|
bool is_multiout; // 多流输出
|
2022-06-28 08:37:45 +00:00
|
|
|
|
int black_white_image_threshold_; //黑白图像阈值
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
SCANCONF img_conf_; //此参数外部不做任何改变,请在writedown_image_configuration做修改
|
|
|
|
|
std::string img_type_;
|
|
|
|
|
|
2022-06-01 03:04:10 +00:00
|
|
|
|
final_img_queue final_imgs_; // JPG ...
|
2022-05-10 00:27:31 +00:00
|
|
|
|
unsigned int usb_img_index_;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
unsigned int final_img_index_;
|
2022-05-30 09:36:42 +00:00
|
|
|
|
std::string final_path_;
|
2022-06-01 03:04:10 +00:00
|
|
|
|
BlockingQueue<std::shared_ptr<tiny_buffer>> imgs_;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
void init_settings(const char* json_setting_text);
|
|
|
|
|
int on_scann_error(int err); // 返回“0”忽略错误继续执行,其它值则停止后续工作
|
2022-05-20 09:11:50 +00:00
|
|
|
|
int try_third_app_handle_start(bool& handled);
|
2022-05-23 03:52:53 +00:00
|
|
|
|
int try_third_app_after_start(int err);
|
2022-06-01 03:04:10 +00:00
|
|
|
|
std::shared_ptr<tiny_buffer> aquire_memory(int size, bool from_usb = true);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
// callback to ui ...
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int notify_ui_working_status(const char* msg, int ev = SANE_EVENT_STATUS, int status = SCANNER_ERR_OK);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
bool waiting_for_memory_enough(unsigned need_bytes);
|
|
|
|
|
|
2022-05-30 06:46:37 +00:00
|
|
|
|
void copy_to_sane_image_header(SANE_Parameters* header, int w, int h, int line_bytes, int channels, int bits);
|
2022-06-01 03:04:10 +00:00
|
|
|
|
int save_usb_data(std::shared_ptr<tiny_buffer> data);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int save_final_image(hg_imgproc::LPIMGHEAD head, void* buf);
|
|
|
|
|
|
2022-05-17 01:46:26 +00:00
|
|
|
|
enum thread_running
|
|
|
|
|
{
|
|
|
|
|
THREAD_RUNNING_IDLE = 0,
|
|
|
|
|
THREAD_RUNNING_USB = 1 << 0,
|
|
|
|
|
THREAD_RUNNING_IMAGE = 1 << 1,
|
|
|
|
|
};
|
|
|
|
|
int is_running(void); // return thread_running
|
2022-05-06 05:37:14 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
|
// 新增自定义伽玛曲线及扫描区域属性 - 2022-05-05
|
|
|
|
|
bool custom_gamma_; // 为true时,应用custom_gamma_val_阵列调整图像色彩;为false时,保持原来的处理方式
|
2022-05-06 08:39:00 +00:00
|
|
|
|
SANE_Gamma *custom_gamma_val_; // 当为RGB或者彩色时,为三组256字节的数据;当为黑白或灰度时,只有一组256字节
|
2022-05-06 05:37:14 +00:00
|
|
|
|
bool custom_area_; // 是否启用自定义区域,为true时才使用下列4个数据;为false时保持原来的处理方式
|
|
|
|
|
double custom_area_lt_x_; // 自定义区域左上角x坐标
|
|
|
|
|
double custom_area_lt_y_; // 自定义区域左上角y坐标
|
|
|
|
|
double custom_area_br_x_; // 自定义区域右下角x坐标
|
|
|
|
|
double custom_area_br_y_; // 自定义区域右下角y坐标
|
|
|
|
|
SIZE paper_size_mm_; // 当前纸张尺寸(mm)
|
|
|
|
|
// 新增自定义伽玛曲线及扫描区域属性 - END
|
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
public:
|
|
|
|
|
void set_ui_callback(sane_callback cb, bool enable_async_io);
|
|
|
|
|
int reset_io(usb_io* io);
|
|
|
|
|
int io_disconnected(void);
|
|
|
|
|
int get_pid(void);
|
|
|
|
|
int get_vid(void);
|
|
|
|
|
int close(bool force);
|
|
|
|
|
int set_setting(int setting_no, void* data, int len);
|
|
|
|
|
int get_setting(int setting_no, char* json_txt_buf, int* len);
|
|
|
|
|
|
|
|
|
|
std::string name(void);
|
|
|
|
|
int status(void);
|
|
|
|
|
bool is_online(void);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
virtual int start(void);
|
|
|
|
|
virtual int get_image_info(SANE_Parameters* ii);
|
|
|
|
|
virtual int read_image_data(unsigned char* buf, int* len);
|
|
|
|
|
virtual int stop(void);
|
|
|
|
|
virtual int reset(void);
|
|
|
|
|
virtual int device_io_control(unsigned long code, void* data, unsigned* len);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io);
|
|
|
|
|
virtual ~hg_scanner();
|
|
|
|
|
|
|
|
|
|
static std::string temporary_file(char* tail = NULL, char* head = NULL);
|
2022-05-10 00:27:31 +00:00
|
|
|
|
static int save_2_tempory_file(std::shared_ptr<std::vector<char>> data, std::string* path_file, unsigned int index = 0);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
///////////////////////////////新增 20220425//////////////////////////
|
|
|
|
|
virtual int set_leaflet_scan(void);//单张扫描
|
|
|
|
|
virtual int get_abuot_info(void);//获取软件关于信息 (基类实现)
|
|
|
|
|
virtual int restore_default_setting(void);//恢复默认设置 (基类实现)
|
|
|
|
|
virtual int set_final_image_format(SANE_FinalImgFormat* fmt); // 设置图像处理最终输出(final())的图像数据格式 (基类实现) ***
|
|
|
|
|
virtual int get_compression_format(void);//获取支持的压缩格式 功能不支持
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
virtual int get_roller_num(void); //获取滚轮张数 -2:设备不支持该功能;-1:与设备通信失败;其它大于等于0的为正常
|
2022-05-03 03:56:07 +00:00
|
|
|
|
virtual int clear_roller_num(void); // 清除滚轴计数
|
2022-05-13 08:39:21 +00:00
|
|
|
|
virtual int get_history_count(void);//获取历史扫描张数 -2:设备不支持该功能;-1:与设备通信失败;其它大于等于0的为正常
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
virtual int set_compression_format(void);//设置图像数据最终输出的压缩格式
|
|
|
|
|
virtual int set_auto_color_type(void);// 设置自动匹配颜色模式 (基类实现) ***
|
|
|
|
|
|
|
|
|
|
virtual std::string get_firmware_version(void);
|
|
|
|
|
virtual std::string get_serial_num(void);
|
|
|
|
|
virtual std::string get_ip(void);
|
|
|
|
|
|
|
|
|
|
virtual int get_device_code(void);//获取设备编码
|
|
|
|
|
virtual int get_sleep_time(int& getsleepime);//获取功耗模式(休眠)//获取功耗模式(休眠)
|
|
|
|
|
virtual int set_sleep_time(int sleeptime);//设置功耗模式(休眠)
|
|
|
|
|
|
|
|
|
|
virtual int get_dogear_distance(void);//获取折角检测最小距离阈值
|
|
|
|
|
virtual int set_dogear_distance(void);// 设置折角检测最小距离阈值
|
|
|
|
|
virtual int get_scanner_paperon(SANE_Bool* paperon = NULL);//获取设备有无纸张
|
|
|
|
|
virtual int set_scan_when_paper_on(void);//获取是否为检测到进纸盘上有纸即开始扫描
|
|
|
|
|
virtual int get_scan_when_paper_on(void);//设置是否为检测到进纸盘上有纸即开始扫描
|
|
|
|
|
virtual int get_scan_with_hole(void);// 获取是否为带孔扫描
|
|
|
|
|
virtual int set_scan_with_hole(void);// 设置是否为带孔扫描
|
|
|
|
|
|
|
|
|
|
virtual int get_scan_is_sleep(void);//获取设备是否休眠当中
|
|
|
|
|
};
|
|
|
|
|
|
2022-05-25 09:55:29 +00:00
|
|
|
|
#ifdef UOS
|
|
|
|
|
#ifdef OEM_HANWANG
|
|
|
|
|
static const std::string helpfile_ ="/opt/apps/com.hanvonchina.hanvonscan/entries/help/HanvonScan_scanSettings_Help_manual.pdf";//帮助文档路径
|
2022-05-26 01:38:26 +00:00
|
|
|
|
#elif OEM_LISICHENG
|
2022-05-25 09:55:29 +00:00
|
|
|
|
static const std::string helpfile_ ="/opt/apps/com.lanxumchina.lanxumscan/entries/help/LanxumScan_scanSettings_Help_manual.pdf";//帮助文档路径
|
|
|
|
|
#else
|
|
|
|
|
static const std::string helpfile_ ="/opt/apps/com.huagaochina.huagoscan/entries/help/HuaGoScan_scanSettings_Help_manual.pdf";//帮助文档路径
|
|
|
|
|
#endif
|
|
|
|
|
#elif KYLIN
|
|
|
|
|
#ifdef OEM_HANWANG
|
|
|
|
|
static const std::string helpfile_ ="/opt/apps/scanner-driver-hanvon/doc/HanvonScan_scanSettings_Help_manual.pdf";//帮助文档路径
|
2022-05-26 01:38:26 +00:00
|
|
|
|
#elif OEM_LISICHENG
|
2022-05-25 09:55:29 +00:00
|
|
|
|
static const std::string helpfile_ ="/opt/apps/scanner-driver-lanxum/doc/LanxumScan_scanSettings_Help_manual.pdf";//帮助文档路径
|
|
|
|
|
#else
|
|
|
|
|
static const std::string helpfile_ ="/opt/apps/scanner-driver-huagao/doc/HuaGoScan_scanSettings_Help_manual.pdf";//帮助文档路径
|
|
|
|
|
#endif
|
2022-05-27 01:24:28 +00:00
|
|
|
|
#elif defined(WIN32)
|
|
|
|
|
static const std::string helpfile_ = "docs\\help_setting.pdf";
|
2022-05-25 09:55:29 +00:00
|
|
|
|
#endif
|