code_device/hgdriver/hgdev/common_setting.h

1165 lines
33 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.

#pragma once
// hg_scanner_cfg is the base configuration definitions
//
// created on 2022-02-23
//
#include <string>
#include "char_const.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 硬件配置项定义
//
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
typedef struct hg_tag_SIZE
{
long cx;
long cy;
}CSSIZE, * PCSSIZE, * LPCSSIZE;
typedef CSSIZE CSSIZEL;
typedef CSSIZE* PCSSIZEL, * LPCSSIZEL;
#if defined(WIN32) || defined(_WIN64)
#include <Windows.h>
#else
typedef CSSIZE Size;
typedef CSSIZE SIZE;
typedef unsigned long DWORD;
typedef long LONG;
#endif
enum hg_scanner_type
{
HG_SCANNER_TYPE_NONE = 0,
HG_SCANNER_TYPE_G100,
HG_SCANNER_TYPE_G200,
HG_SCANNER_TYPE_G300,
HG_SCANNER_TYPE_G400,
HG_SCANNER_TYPE_G139,
HG_SCANNER_TYPE_G239,
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 设置项字符串定义
//
// int match_best_xxx(std::string& val, bool* exact) 函数簇原型说明
//
// Function: 匹配最接近的字符串,并返回对应的枚举值
//
// Parameter: val - [in] 用户传入的设置参数字符串
// [out] 如果传入的参数不能精确匹配固定值,则修改为最接近的值或默认值
//
// exact - [out] 如果val与固定选项精确匹配 则返回true
// 否则返回false并在val中返回精确的选项值
//
// Return: 匹配字符串值的枚举值
//
// 注意下列所有文本定义必须与设备JSON配置文件中的相关内容保持一致否则将导致设备参数设置不正确行为不可控
//
// 颜色模式 选项
//#define HUAGAO_SETTING_STR_COLOR_MODE_BLACK_WHITE "黑白"
//#define HUAGAO_SETTING_STR_COLOR_MODE_256_GRAY "256级灰度"
//#define HUAGAO_SETTING_STR_COLOR_MODE_24_BITS "24位彩色"
//#define HUAGAO_SETTING_STR_COLOR_MODE_AUTO_MATCH "颜色自动识别"
enum
{
COLOR_MODE_BLACK_WHITE = 0,
COLOR_MODE_256_GRAY,
COLOR_MODE_24_BITS,
COLOR_MODE_AUTO_MATCH,
};
int match_best_color_mode(std::string& val, bool* exact);
std::string color_mode_string(int clr_mode);
//#define HUAGAO_SETTING_STR_MULTI_OUT_NOT "不选择输出模式"
//#define HUAGAO_SETTING_STR_MULTI_OUT_ALL "彩色+灰度+黑白"
//#define HUAGAO_SETTING_STR_MULTI_COLOR_ADN_GRAY "彩色+灰度"
//#define HUAGAO_SETTING_STR_MULTI_COLOR_ADN_BW "彩色+黑白"
//#define HUAGAO_SETTING_STR_MULTI_GRAY_ADN_BW "灰度+黑白"
enum
{
MULTI_OUT_ALL = 0,
MULTI_COLOR_AND_GRAY,
MULTI_COLOR_AND_BW,
MULTI_GRAY_AND_BW
};
int match_best_multi_out(std::string& val, bool* exact);
std::string multi_out_string(int clr_mode);
// 除色 选项
//#define HUAGAO_SETTING_STR_RID_COLOR_NONE "不除色"
//#define HUAGAO_SETTING_STR_RID_COLOR_RID_RED "除红色"
//#define HUAGAO_SETTING_STR_RID_COLOR_RID_GREEN "除绿色"
//#define HUAGAO_SETTING_STR_RID_COLOR_RID_BLUE "除蓝色"
//#define HUAGAO_SETTING_STR_RID_COLOR_ENHANCE_RED "红色增强"
//#define HUAGAO_SETTING_STR_RID_COLOR_ENHANCE_GREEN "绿色增强"
//#define HUAGAO_SETTING_STR_RID_COLOR_ENHANCE_BLUE "蓝色增强"
enum
{
RID_COLOR_NONE = 0,
RID_COLOR_RID_RED,
RID_COLOR_RID_GREEN,
RID_COLOR_RID_BLUE,
RID_COLOR_ENHANCE_RED,
RID_COLOR_ENHANCE_GREEN,
RID_COLOR_ENHANCE_BLUE,
};
int match_best_rid_color(std::string& val, bool* exact);
std::string rid_color_string(int rid_color);
// 纸张 选项
//#define HUAGAO_SETTING_STR_PAPER_A3 "A3"
//#define HUAGAO_SETTING_STR_PAPER_A4 "A4"
//#define HUAGAO_SETTING_STR_PAPER_A5 "A5"
//#define HUAGAO_SETTING_STR_PAPER_A6 "A6"
//#define HUAGAO_SETTING_STR_PAPER_B4 "B4"
//#define HUAGAO_SETTING_STR_PAPER_B5 "B5"
//#define HUAGAO_SETTING_STR_PAPER_B6 "B6"
//#define HUAGAO_SETTING_STR_PAPER_8K "8开"
//#define HUAGAO_SETTING_STR_PAPER_16K "16开"
//#define HUAGAO_SETTING_STR_PAPER_LETTER "Letter"
//#define HUAGAO_SETTING_STR_PAPER_A4_LATERAL "A4横向"
//#define HUAGAO_SETTING_STR_PAPER_A5_LATERAL "A5横向"
//#define HUAGAO_SETTING_STR_PAPER_A6_LATERAL "A6横向"
//#define HUAGAO_SETTING_STR_PAPER_B5_LATERAL "B5横向"
//#define HUAGAO_SETTING_STR_PAPER_B6_LATERAL "B6横向"
//#define HUAGAO_SETTING_STR_PAPER_16K_LATERAL "16开横向"
//#define HUAGAO_SETTING_STR_PAPER_LETTER_LATERAL "Letter横向"
//#define HUAGAO_SETTING_STR_PAPER_DOUBLE_LETTER "Double Letter"
//#define HUAGAO_SETTING_STR_PAPER_LEGAL "LEGAL"
//#define HUAGAO_SETTING_STR_PAPER_AUTO_MATCH "匹配原始尺寸"
//#define HUAGAO_SETTING_STR_PAPER_MAX_SIZE "最大扫描尺寸"
//#define HUAGAO_SETTING_STR_PAPER_MAX_SIZE_CLIP "最大扫描尺寸自动裁切"
//#define HUAGAO_SETTING_STR_PAPER_TRIGEMINY "三联试卷"
enum
{
PAPER_A3 = 0,
PAPER_A4,
PAPER_A5,
PAPER_A6,
PAPER_B4,
PAPER_B5,
PAPER_B6,
PAPER_8K,
PAPER_16K,
PAPER_LETTER,
PAPER_A4_LATERAL,
PAPER_A5_LATERAL,
PAPER_A6_LATERAL,
PAPER_B5_LATERAL,
PAPER_B6_LATERAL,
PAPER_16K_LATERAL,
PAPER_LETTER_LATERAL,
PAPER_DOUBLE_LETTER,
PAPER_LEGAL,
PAPER_AUTO_MATCH,
PAPER_MAX_SIZE,
PAPER_MAX_SIZE_CLIP,
PAPER_TRIGEMINY,
};
SIZE paper_size(int paper); // unit: mm
int match_best_paper(std::string& val, bool* exact);
std::string paper_string(int paper);
bool is_lateral(int paper);
// 页面扫描模式 选项
//#define HUAGAO_SETTING_STR_PAGE_SINGLE "单面"
//#define HUAGAO_SETTING_STR_PAGE_DOUBLE "双面"
//#define HUAGAO_SETTING_STR_PAGE_OMIT_EMPTY "跳过空白页(通用)"
//#define HUAGAO_SETTING_STR_PAGE_OMIT_EMPTY_RECEIPT "跳过空白页(发票纸)"
//#define HUAGAO_SETTING_STR_PAGE_FOLIO "对折"
enum {
PAGE_SINGLE = 0,
PAGE_DOUBLE,
PAGE_OMIT_EMPTY,
PAGE_OMIT_EMPTY_RECEIPT,
PAGE_FOLIO,
};
int match_best_page(std::string& val, bool* exact);
std::string page_string(int page);
// 锐化 选项
//#define HUAGAO_SETTING_STR_SHARPEN_NONE "无"
//#define HUAGAO_SETTING_STR_SHARPEN_SHARPEN "锐化"
//#define HUAGAO_SETTING_STR_SHARPEN_SHARPEN_MORE "进一步锐化"
//#define HUAGAO_SETTING_STR_SHARPEN_HAZY "模糊"
//#define HUAGAO_SETTING_STR_SHARPEN_HAZY_MORE "进一步模糊"
enum
{
SHARPEN_NONE = 0,
SHARPEN_SHARPEN,
SHARPEN_SHARPEN_MORE,
SHARPEN_HAZY,
SHARPEN_HAZY_MORE,
};
int match_best_sharpen(std::string& val, bool* exact);
std::string sharpen_string(int sharpen);
//背景填充方式 选项
//#define HUAGAO_SETTING_STR_FILL_BKG_CONVEX_POLYGON "凸多边形"
//#define HUAGAO_SETTING_STR_FILL_BKG_CONCAVE_POLYGON "凹多边形"
enum
{
FILL_BKG_CONVEX_POLYGON = 0,
FILL_BKG_CONCAVE_POLYGON,
};
int match_best_fill_background(std::string& val, bool* exact);
std::string fill_background_string(int fill);
// 扫描数量 选项
//#define HUAGAO_SETTING_STR_SCAN_MODE_CONTINUOUS "连续扫描"
//#define HUAGAO_SETTING_STR_SCAN_MODE_GIVEN_COUNT "扫描指定张数"
enum
{
SCAN_MODE_CONTINUOUS = 0,
SCAN_MODE_GIVEN_COUNT,
};
int match_best_scan_mode(std::string& val, bool* exact);
std::string scan_mode_string(int mode);
// 文稿方向 选项
//#define HUAGAO_SETTING_STR_TEXT_DIRECTION_0 "0°"
//#define HUAGAO_SETTING_STR_TEXT_DIRECTION_90 "90°"
//#define HUAGAO_SETTING_STR_TEXT_DIRECTION_180 "180°"
//#define HUAGAO_SETTING_STR_TEXT_DIRECTION_270 "-90°"
//#define HUAGAO_SETTING_STR_TEXT_DIRECTION_AUTO "自动文本方向识别°"
enum
{
TEXT_DIRECTION_0 = 0,
TEXT_DIRECTION_90,
TEXT_DIRECTION_180,
TEXT_DIRECTION_270,
TEXT_DIRECTION_AUTO,
};
int match_best_text_direction(std::string& val, bool* exact);
std::string text_direction_string(int text_dir);
//#define HUAGAO_SETTING_STR_PERMAEATE_WEAKER "较弱"
//#define HUAGAO_SETTING_STR_PERMAEATE_WEAK "弱"
//#define HUAGAO_SETTING_STR_PERMAEATE_ORDINARY "一般"
//#define HUAGAO_SETTING_STR_PERMAEATE_STRONG "强"
//#define HUAGAO_SETTING_STR_PERMAEATE_STRONGER "较强"
enum
{
PERMAEATE_WEAKER = 0,
PERMAEATE_WEAK,
PERMAEATE_ORDINARY,
PERMAEATE_STRONG,
PERMAEATE_STRONGER,
};
int match_best_permaeate_lv(std::string& val, bool* exact);
std::string is_permaeate_string(int text_dir);
//画质
enum
{
IMG_NONE = -1,
IMG_SPEED ,
IMG_QUALITY,
};
int match_best_img_quality(std::string& val, bool* exact);
std::string is_img_quality(int is_quakuty);
// 双张处理
enum
{
DOUBLE_PAPER_CONTINUE = 0x01, // 继续扫描
DOUBLE_PAPER_SAVE_IMG = 0x02, // 保存图片
};
int double_paper_flag_from_option_value(std::string& opt_val, bool* exact);
std::string double_paper_flag_to_option_value(int flag);
bool is_continue_when_double_paper(int flag);
bool is_save_img_when_double_paper(int flag);
enum
{
PAPER_WEAK = 0,
PAPER_AVERAGE,
PAPER_STRONG,
};
int match_best_paper_strength(std::string& val, bool* exact);
std::string is_paper_strength(int strength);
enum
{
SLEEP_TIME_0MIN = 0,
SLEEP_TIME_5MIN,
SLEEP_TIME_10MIN,
SLEEP_TIME_30MIN,
SLEEP_TIME_60MIN,
SLEEP_TIME_120MIN,
SLEEP_TIME_240MIN,
};
int match_best_sleep_time(std::string& val, bool* exact);
std::string is_sleep_time(int sleep_time);
enum
{
FOLD_TYPE_LEFT_RIGHT,
FOLD_TYPE_UP_DOWN,
FOLD_TYPE_AUTO
};
int match_best_fold_type(std::string& val, bool* exact);
std::string is_fold_type(int fold_type);
typedef union _img_proc_fixed_param
{
unsigned long long value;
struct
{
unsigned long long rid_red : 1; // 多流输出除红
unsigned long long rid_answer_red : 1; // 答题卡除红
unsigned long long erase_bakground : 1; // 背景移除
unsigned long long noise_optimize : 1; // 噪点优化
unsigned long long exchange : 1; // 交换正反面
unsigned long long split : 1; // 图像拆分
unsigned long long rid_hole : 1; // 穿孔移除
unsigned long long dark_sample : 1; // 深色样张
unsigned long long rotate_back_180 : 1; // 背面旋转180度
unsigned long long fractate_check : 1; // 折角检测
unsigned long long is_permeate : 1; // 防止渗透
unsigned long long remove_morr : 1; // 去除摩尔纹
unsigned long long error_extention : 1; // 错误扩散
unsigned long long remove_txtture : 1; // 去网纹
unsigned long long fill_background : 2; // 背景填充方式
unsigned long long is_permeate_lv_ : 3; // 渗透等级 1 - 5
unsigned long long multi_out : 3; // 多流输出
unsigned long long erase_black_frame: 1; // 消除黑框
unsigned long long automatic_skew : 1; // 自动纠偏
unsigned long long rid_color : 3; // 除色
unsigned long long color_mode : 3; // 颜色模式
unsigned long long page : 3; // 页面模式
unsigned long long paper : 8; // 纸张类型
unsigned long long sharpen : 4; // 锐化模式
unsigned long long text_direction : 4; // 文稿方向
unsigned long long reserved2 : 14; // 保留
}bits;
}IMGPRCFIXPARAM;
// 设置项字符串定义 - OVER
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 状态信息描述符
//
// 状态信息描述符 - OVER
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////图像参数及设备协议///////////////////////////////////////////////////////
//DSP 3288设备USB读写协议结构
//
typedef struct tag_USBCB {
unsigned int u32_CMD;
unsigned int u32_Data;
unsigned int u32_Count;
}USBCB, * PUSBCB;
//DSP设备USB读写协议结构 - OVER
enum PaperAlign :unsigned char {
Rot0 = 0,
Rot270 = 3,
AutoTextOrientation = 5
};
enum LowPowerMode :unsigned int {
Min_None = 0,
Min_5,
Min_10,
Min_20,
Min_30,
Min_60,
Min_120,
Min_240
};
//纸张类型
enum TwSS : unsigned short
{
None = 0,
A4Letter = 1,
A4 = 1,
B5Letter = 2,
JISB5 = 2,
B5 = 2,
USLetter = 3,
USLegal = 4,
A5 = 5,
B4 = 6,
ISOB4 = 6,
B6 = 7,
ISOB6 = 7,
USLedger = 9,
USExecutive = 10,
A3 = 11,
B3 = 12,
ISOB3 = 12,
A6 = 13,
C4 = 14,
C5 = 15,
C6 = 16,
_4A0 = 17,
_2A0 = 18,
A0 = 19,
A1 = 20,
A2 = 21,
A7 = 22,
A8 = 23,
A9 = 24,
A10 = 25,
ISOB0 = 26,
ISOB1 = 27,
ISOB2 = 28,
ISOB5 = 29,
ISOB7 = 30,
ISOB8 = 31,
ISOB9 = 32,
ISOB10 = 33,
JISB0 = 34,
JISB1 = 35,
JISB2 = 36,
JISB3 = 37,
JISB4 = 38,
JISB6 = 39,
JISB7 = 40,
JISB8 = 41,
JISB9 = 42,
JISB10 = 43,
C0 = 44,
C1 = 45,
C2 = 46,
C3 = 47,
C7 = 48,
C8 = 49,
C9 = 50,
C10 = 51,
USStatement = 52,
BusinessCard = 53,
MaxSize = 54,
K8 = 0x81,
K16 = 0x82,
Trigeminy = 0x83,
};
//纸张类型 - OVER
enum ScannerSerial
{
G100Serial,
G200Serial,
G300Serial,
G400Serial,
G10039Serial,
G20039Serial,
};
#pragma pack(push)
#pragma pack(4)
//除色和增强
//
typedef enum tagColor_Filter
{
FILTER_RED,
FILTER_GREEN,
FILTER_BLUE,
FILTER_NONE,
FILTER_ALL,
ENHANCE_RED,
ENHANCE_GREEN,
ENHANCE_BLUE
}ColorFilter;
//除色和增强 - OVER
//填穿孔
//
typedef struct tagFillHole
{
uint8_t is_fillhole;
int fillholeratio;
}FillHole;
//填穿孔 - OVER
//黑白降噪
//
typedef struct tagDetachNoise
{
unsigned char is_detachnoise;
int detachnoise;
}DetachNoise;
//黑白降噪 -OVER
//自定义裁切
//
typedef struct tagCrop_Rect
{
int enable;
int x; /*****自定义裁切区域左上角x坐标*/
int y; /*****自定义裁切区域左上角y坐标*/
int width; /*****自定义裁切区域宽度*******/
int height; /*****自定义裁切区域高度*******/
}CropRect;
//自定义裁切 -OVER
//多留输出
//
typedef enum tagMulti_Output {
Unused = -1,
All,
ColorGray,
ColorBw,
GrayBw
}MultiOutput;
//多留输出 -OVER
//设置设备硬件状态
//
typedef struct tagHhardware_Params
{
unsigned char capturepixtype;
unsigned char en_doublefeed;
unsigned char en_stapledetect;
unsigned char en_skrewdetect;
unsigned char skrewdetectlevel;
LowPowerMode lowpowermode;
#ifdef UV
unsigned char en_uv;
#endif
}HardwareCaps;
//设置设备硬件状态 -OVER
//图像参数设置
//
typedef struct _scan_conf
{
unsigned char papertype; /**< 纸张尺寸>*/
unsigned char paperAlign; /**< 纸张尺寸是否横向>*/
unsigned char en_sizecheck; /**< 尺寸检测>*/
float imageRotateDegree; /**< 旋转>*/
unsigned char is_duplex; /**< 是否双面*/
unsigned char en_fold; /**< 是否对折>*/
int pixtype; /**< 颜色模式>*/
int automaticcolor; /**< 顔色自動識別>*/
int automaticcolortype; /**< 顔色自動識別后非彩色上傳類型>*/
float resolution_dst; /**< 设置分辨率>*/
float resolution_native; /**< 保存分辨率>*/
float gamma; /**< 伽马值>*/
float contrast; /**< 对比度>*/
float brightness; /**< 亮度>*/
float threshold; /**< 阈值>*/
unsigned char is_autocontrast; /**< 自动对比度>*/
unsigned char is_autocrop; /**< 自动裁切>*/
unsigned char is_autodiscradblank_normal; /**< 自动丢弃空白页通用>*/
int discardblank_percent; /**< 跳过空白页阀值*/
unsigned char is_autodiscradblank_vince; /**< 自动丢弃空白页发票>*/
unsigned char is_switchfrontback; /**< 交换正反面>*/
unsigned char autodescrew; /**< 自动纠偏>*/
unsigned char multi_output_red; /**< 多流输出>*/
unsigned char hsvcorrect; /**< 答题卡除红>*/
unsigned char filter; /**< 除色>*/
unsigned char sharpen; /**< 锐化>*/
unsigned char enhance_color; /**< 颜色增强>*/
unsigned char fillbackground; /**< 填黑框>*/
bool is_convex; /**< 填黑框模式true为凸多边形填充false为凹多边形填充默认true>*/
int noise; /**< 除噪像素能够消除noise宽度的背景竖条纹干扰默认40>*/
int indent; /**< 轮廓缩进裁剪、纠偏或者黑底填充时对探索到的纸张轮廓进行缩进indent像素默认5>*/
int AutoCrop_threshold; /**< 自动裁剪二值化阈值,取值范围(0, 255)默认40>*/
unsigned short scannum; /**< 扫描张数>*/
unsigned char is_backrotate180; /**< 背面旋转180>*/
unsigned char is_dogeardetection; /**< 折角检测>*/
HardwareCaps hardwarecaps; /**< 硬件扫描参数>*/
FillHole fillhole; /**< 填穿孔>*/
DetachNoise detachnoise; /**< 黑白降噪>*/
unsigned char is_autotext; /**< 自动文本方向识别>*/
bool isfillcolor; /**< 自动裁切颜色填充>*/
int refuseInflow; /**< 防止渗透>*/
int colorCorrection; /**< 色彩校正>*/
int removeMorr; /**< 去除摩尔纹>*/
int errorExtention; /**< 错误扩散>*/
int textureRemove; /**< 除网纹>*/
int splitImage; /**< 图像拆分>*/
CropRect cropRect; /**< 自定义裁切>*/
MultiOutput multiOutput; /**< 多流输出>*/
bool normalCrop; /**< 自动裁切深色样张>*/
uint32_t dogeardistabce;
bool fadeback; /**< 背景除色>*/
int fadebackrange; /**< 背景除色阈值>*/
bool isuoloadexceptionimage; /**< 是否保留双张出图>*/
int fillholeratio_up; /**< 上侧除穿孔比率0为不除。[050]added on 2022-09-12>*/
int fillholeratio_down; /**< 下侧除穿孔比率0为不除。[050]added on 2022-09-12>*/
int fillholeratio_left; /**< 左侧除穿孔比率0为不除。[050]added on 2022-09-12>*/
int fillholeratio_right; /**< 右侧除穿孔比率0为不除。[050]added on 2022-09-12>*/
uint8_t fold_concatmode; /**< 对折拼接模式 0左右,1上下2自动对折>*/
uint32_t reserve[1024]; /**< 预留4096字节做协议扩展*/
}SCANCONF ,*LPSCANCONF;
//图像参数设置 -OVER
//硬件协议定义
namespace setting_hardware
{
typedef union hg_scanner_config_3399
{
unsigned int value;
struct
{
unsigned int paper : 5; // 纸张类型 (每个型号有不同的映射表)
unsigned int color : 1; // 是否彩色 0 - 黑白, 1 - 彩色
unsigned int dpi : 2; // DPI (映射表)
unsigned int ultrasonic_enable : 1; // 是否进行超声波检测(双/多张进纸检测)
unsigned int staple_enbale : 1; // 是否进行钉书钉检测
unsigned int screw_detect_enable : 1; // 是否歪斜检测
unsigned int screw_detect_level : 3; // 歪斜检测水平
unsigned int iscorrect_mod : 1; // 是否自动校正
unsigned int is_autopaper : 1; // 是否自动进纸
// unsigned int reserved1 : 4; // 保留
unsigned int is_textcorrect : 1; // 1 - 照片模式0 - 文本模式。默认值为 0
unsigned int is_fixedpaper : 1; //
unsigned int en_anlogic_key : 1; //
unsigned int en_autosize : 1; //
unsigned int pc_correct : 1; // 是否在PC端校正 1:不校正 cis原图0:校正
unsigned int enable_sizecheck : 1; // 是否进行尺寸检测
unsigned int enabledsp_cache : 1; // 是否在片上缓存
unsigned int sizeerror_errorratio : 9; // 幅面检测
}params_3399;
}HGSCANCONF_3399;
typedef union hg_scanner_config_dsp
{
unsigned int value;
struct
{
unsigned int paper : 5;
unsigned int color : 1;
unsigned int dpi : 2;
unsigned int double_feed_enbale : 1;
unsigned int stable_enbale : 1;
unsigned int screw_detect_enable : 1;
unsigned int screw_detect_level : 3;
unsigned int isCorrect : 1; //设置0 为原图1为校正后的图
unsigned int unused_one : 5;
unsigned int pc_correct : 1;
unsigned int enable_sizecheck : 1;
unsigned int unused_two : 10;
}params_dsp;
}HGSCANCONF_DSP;
typedef union hg_scanner_config_3288
{
unsigned int value;
//struct
//{
// unsigned int pageSize : 5;
// unsigned int isColor : 1;
// unsigned int dpi : 2;
// unsigned int doubleFeeded : 1;
// unsigned int enableUV : 1;
// unsigned int enableLed : 1;
// unsigned int sizedetece : 1;
// unsigned int reversed1 : 5;
// unsigned int isCorrect : 1;
// unsigned int dstHeight : 8;
// unsigned int reversed2 : 6;
//}params;
struct // changed on 2022-07-25
{
unsigned int pageSize : 5;
unsigned int isColor : 1;
unsigned int dpi : 2;
unsigned int doubleFeeded : 1;
unsigned int enableStable : 1;
unsigned int enableLed : 1;
unsigned int enableSizeDetect : 1;
unsigned int lutmode : 1; // 设置文本和照片模式, 0 - 文本1 - 照片。默认值为“0”
unsigned int reversed1 : 4;
unsigned int isCorrect : 1; //设置0 为原图1为校正后的图
unsigned int dstHeight : 8;
unsigned int reversed2 : 6;
}params_3288;
}HGSCANCONF_3288;
}
//硬件协议定义 -OVER
namespace setting3288dsp
{
//100-200 dsp 300-400 3288设备状态
typedef enum tagUsbSupported
{
SCAN_STOP = -2, //停止扫描
HAVE_ERROR = -1, //异常
NORMAL = 0, //正常状态
OPEN_COVER = 1, //开盖
NO_FEED = 2, //无纸
FEED_IN_ERROR = 4, //搓纸失败
PAPER_JAM = 8, //卡纸
DETECT_DOUBLE_FEED = 16,//检测到双张
DETECT_STAPLE = 32, //检测到订书钉
PAPER_SKEW = 64, //纸张倾斜
AUTO_SCAN_MODE = 65, //自动模式
MANAUL_SCAN_MODE = 66, //手动模式
COUNT_MODE = 67, //计数模式
HARDWARE_ERROR = 68, //硬件错误
FPGA_ERROR = 68, //FPGA崩溃
START_SCAN = 69, //开始
STOP_SCAN = 70, //停止
HAVE_IMAGE = 71, //有图
UPDATE_SCAN_PARAMETER = 72,// 更新扫描参数
PC_SCAN_BUSY_or_ERROR = 73,// PC繁忙或出错
DOG_EAR = 74, //摺角
SIZE_ERROR = 75, //幅面检测错误
AQUIRE_IMAGE_TIMEOUT = 76, //取图超时
LOSE_IMAGE = 77, //获取图片与扫描张数不匹配
USB_BULK_ERROR = 78, //usb读取数据错误
V4L2_AQULRE_ERROR = 79, //v4l2取图失败
V4L2_IMAGE_EMPTY = 80, //扫描仪内部图片丢失
SLEEPING = 81, //处于休眠中
HAVE_DOGEAR = 82, //检测到有折角
USB_DISCONNECTED = 200, //USB 未连接
USER_STOP = 201, //用户点击停止
AUTO_FLAT_FINISHED = 202, //自动校正完成
USB_CONNECTED, //USB已连接
HAVE_PAPER,
DEVICE_OFF_LINE, //USB链接断开
} UsbSupported, * PUsbSupported;
//
//设备状态 - OVER
enum tagUsbKeyWords
{
//无命令
NO_COMMAND = 0,
//获取dsp 状态
GET_DSP_STATUS = 1,
//取图
GET_IMAGE = 2,
//销毁DSP中驻存的图
POP_IMAGE = 3,
//开始扫描命令
START_COMMAND = 4,
//停止扫描命令
STOP = 5,
//获取扫描仪扫描模式
GET_SCAN_MODE = 6,
//获取固件版本号
GET_FW_VERSION = 7,
//返回PC端的状态
SEND_STATUS_PC = 8,
//下发扫描配置参数
CONFIGURED_DATA = 9,
//下发固件信息
SEND_FW = 10,
//获取扫描参数
GET_CONFIG_DATA = 11,
//获取扫描总张数
GET_SCANN_NUM = 12,
//获取有无纸的状态
GET_PAPERFEEDER_STATUS = 13,
//DSP初始化
INIT_HARDWARE_SYS = 14,
//下发元器件配置参数灰度LED R曝光时间
SEND_COMPONENTS_GR = 15,
//下发元器件配置参数LED G/B曝光时间
SEND_COMPONENTS_GB = 16,
//下发扫描模式
SEND_SCAN_MODE = 17,
//开始进行平场矫正
START_FLAT = 18,
//停止平场矫正
STOP_FLAT = 19,
//下发200dpi彩色平场矫正参数
SEND_200_COLOR_FLAT_DATA = 20,
//下发300dpi彩色平场矫正参数
SEND_300_COLOR_FLAT_DATA = 21,
//获取200dpi彩色平场矫正参数
GET_200_COLOR_FLAT_DATA = 22,
//获取300dpi彩色平场矫正参数
GET_300_COLOR_FLAT_DATA = 23,
//下发200dpi灰度平场校正参数
SEND_200_GRAY_FLAT_DATA = 24,
//下发300dpi灰度平场校正参数
SEND_300_GRAY_FLAT_DATA = 25,
//获取200DPI灰度平场校正参数
GET_200_GRAY_FLAT_DATA = 26,
//获取300DPI灰度平场校正参数
GET_300_GRAY_FLAT_DATA = 27,
//下发序列号命令
SEND_SERIAL = 28,
//获取序列号命令
GET_SERIAL = 29,
//获取滚轴数
GET_ROLLER_NUM = 0x1e,
//清零滚轴数
CLR_ROLLER_NUM = 0x1f,
//清除扫描总张数
CLR_SCAN_NUM = 0x20,
//准备更新固件
PRE_UPGRADE = 0X21,
//开始更新固件
START_UPGRADE = 0x22,
//彩色的AD参数
RGB_ADI_PARA = 0x23,
//灰度的AD参数
ADI_PARA = 0x24,
//获取CIS参数曝光时间ad参数)
GET_CIS_PARA = 0x25,
//扫描张数
START_COMMAND_COUNT = 0x26,
//下发休眠时间
SET_SLEEP_TIME = 0x27,
//获取休眠时间
GET_SLEEP_TIME = 0x28,
//清除缓存
CLR_CACHE = 0x29,
//下发速度模式
SET_SPEED_MODE = 0x2a,
//获取扫描速度模式
GET_SPEED_MODE = 0X2b,
//设置固件版本一共8个字节
SET_FW_VERSION = 0X2c,
//获取DSP版本
GET_DSP_VERSION = 0X2d,
//采集板FPGA固件版本
GET_SCANFPGA_VERSION = 0x2e,
//电机板FPGA固件版本
GET_MOTORFPGA_VERSION = 0X2f,
//设置制造商信息
SET_USB_INFOR_MANUFACTURE = 0X30,
//获取制造商信息
GET_USB_INFOR_MANUFACTURE = 0X31,
//设置产品型号信息
SET_USB_INFOR_MODEL_NAME = 0X32,
//获取产品型号信息
GET_USB_INFOR_MODEL_NAME = 0X33,
//设置USB PID / VID信息
SET_USB_INFOR_VIDPID = 0X34,
GET_USB_INFOR_VIDPID = 0X35,
//设置卡纸急停检测灵敏度
SET_JAM_DETECT_SENSITIVE = 0X36,
//获取卡纸急停检测灵敏度
GET_JAM_DETECT_SENSITIVE = 0X37,
//设置横向畸变系数
SET_JUST_COF_H = 0x38,
//读取横向畸变系数
GET_JUST_COF_H = 0x39,
//G400 清除硬件异常
CLEAR_HWERROR = 0x40,
//设置纵向畸变系数
SET_JUST_COF_V = 0x41,
//读取纵向畸变系数
GET_JUST_COF_V = 0x42,
//设置彩色校正参数
SEND_COLOR_FLAT = 0x43,
//设置彩色平场校正参数
SEND_COLORCORRECT_FLAT = 0x44,
//设置灰度校正参数
SEND_GRAY_FLAT = 0x45,
//设置灰度平场校正参数
SEND_GRAYCORRECT_FLAT = 0x46,
//设置平场校正参数
GET_FLAT_DATA = 0x47,
//更新完成
UPDATE_FINISHED = 0x48,
//重启 1进入loader,0普通重启
REBOOT = 0x49,
//获取日志
GET_LOG_FILES_INFO = 0x50,
//发送log文件完成
GET_UPDATE_RESULT = 0x51,
//清空日志
CLEAR_LOG_FILES = 0x52,
//获取搓纸失败
GET_CUO_ERROR,
//获取双张失败次数
GET_DOU_ERROR,
//获取卡纸次数
GET_JAM_ERROR,
//获取设备是否睡眠状态
ACTIVE_SCANNER = 0x100,
//图像处理参数下发
GETSYSINFO_LEN = 0x200,
GETSYSINFO = 0x201,
GETMOTORPARAM = 0x202,
GETMOTORPARMLEN = 0x203,
SETMOTORPARAM = 0x204,
SETMOTORPARAMLEN = 0x205
};
typedef enum tagUsbKeyWords UsbKeyWords, * PUsbKeyWords;
//G300 G400 纸张类型协议 注只支持3288 300 400
//
enum G400_PaperSize {
G400_A3 = 0,
G400_A4,
G400_A4R,
G400_A5,
G400_A5R,
G400_A6,
G400_A6R,
G400_B4,
G400_B5,
G400_B5R,
G400_B6,
G400_B6R,
G400_DOUBLELETTER,
G400_LEGAL,
G400_LETTER,
G400_LETTERR,
G400_LONGLETTER,
G400_MAXSIZE,
G400_AUTO
};
//G300 G400 纸张类型协议 - OVER
}
namespace setting3399
{
enum Scanner_Reg_Defs
{
SR_CMD,
SR_STATUS,
SR_SCAN_COUNT,
SR_OS, //val == 1计数模式
SR_SENSORS,
SR_MOTOR,
SR_IM_TYPE,
SR_IM_COUNT,
SR_IM_TX,
SR_IM_FRONT_SIZE,
SR_IM_CLEAR,
SR_IM_TXING,
SR_IM_POP,
SR_IM_ABORT,
SR_COUNT,
SR_CONFIG_SCAN_PARAM,
SR_GET_FWVERSION,
SR_SET_FWERSION,
SR_GET_SERIALNUM,
SR_SET_SERIALNUM,
SR_CONFIF_IMGPROCPARAM,
SC_AUTOCORRECT,
SC_GET_CORRECT_PARAM,
SC_SET_CORRECT_PARAM,
SR_GET_H_RATIO,
SR_SET_H_RATIO,
SR_GET_V_RATIO,
SR_SET_V_RATIO,
SR_GET_SERIAL_LEN,
SR_GET_GRAY_SP,
SR_GET_COLOR_SP,
SR_SET_GRAY_SP,
SR_SET_COLOR_SP,
SR_SET_SLEEPTIME,
SR_GET_SLEEPTIME,
SR_GET_SLEEP_STAUTUS, //返回1不在睡眠状态 0反之
SR_GET_IMAGEPROCESSDONE,
SR_GET_KEEP_LAST_PAPER,
SR_GET_PAPERON,
SR_SET_SPEEDMODE,
SR_GET_SPEEDMODE,
SR_GET_JSON_SIZE,
SR_GET_JSON,
SR_SET_JSON_PATH,
SR_SET_JSON,
SR_GET_FILE_POS,
SR_SET_FILE_POS,
SR_NOTIFY_SLEEP,
SR_GET_FEEDMODE,
SR_SET_FEEDMODE,
SR_GET_AUTOMATICCONTROLFEEDMODE_ENABLE,
SR_SET_AUTOMATICCONTROLFEEDMODE_ENABLE,
SR_GET_AUTOMATICCONTROLFEEDMODE_THRESHOLD,
SR_SET_AUTOMATICCONTROLFEEDMODE_THRESHOLD,
SR_GET_TRAYPOSITION,
SR_SET_TRAYPOSITION,
SR_GET_LOCK_STATES,
SR_SET_LOCK_STATES,
SR_GET_TOKEN,
SR_SET_TOKEN,
SR_GET_TOKEN_LENGHT,
SR_DECODE_TOKEN,
SR_CLEAN_PAPER_ROAD, //清理纸道
SR_GET_CUO_ERROR = 0x50,
SR_GET_DOU_ERROR,
SR_GET_JAM_ERROR,
SR_GET_SCANN_NUM, //历史张数
SR_CLR_ROLLER_NUM,
SR_GET_ROLLER_NUM, //获取滚轴张数
SR_CLR_SCANN_NUM,
SR_GET_H_200_RATIO, //非敦南cis需返回false
SR_SET_H_200_RATIO,
SR_GET_V_200_RATIO,
SR_SET_V_200_RATIO,
SR_GET_H_300_RATIO,
SR_SET_H_300_RATIO,
SR_GET_V_300_RATIO,
SR_SET_V_300_RATIO,
SR_GET_H_600_RATIO,
SR_SET_H_600_RATIO,
SR_GET_V_600_RATIO,
SR_SET_V_600_RATIO,
SR_UPDATA_START = 0x100,
SR_UPDATA_STAUTUS = 0x101,
SR_UPDATA_MD5_RELUST = 0x102,
SR_UPDATA_RECOVERY = 0x103,
SR_UPDATA_REBOOT = 0x104,
SR_POWEROFF = 0x105,
SR_REBOOT = 0x106,
SR_FLAT_CLR_MAX_BRIGHT,
SR_FLAT_GRAY_MAX_BRIGHT,
SR_KERNEL_VERSION_INFO_LENGTH,
SR_GET_KERNEL_VERSION,
SR_GET_MBSTATUS,
SR_GET_IPADDR_LENGHT = 0x200,
SR_GET_MACADDR,
SR_GET_IPADDR,
SR_GET_MBVERSION_LENGHT,
SR_GET_MBVERSION,
SR_GET_USBVIDPID,
SR_SET_USBVIDPID,
SR_SET_STARTBACKUP
};
enum Scanner_Cmd_Defs
{
SC_START,
SC_STOP,
SC_CLEAR,
SC_COUNT
};
enum HGType
{
MtBoard = 1,
FPGA,
V4L2,
IMG,
AutoCorrect,
STOPSCAN,
};
struct HGEIntInfo
{
HGType From;
unsigned int Code;
unsigned int Img_Index;
};
enum PaperSize_ //239 302 402
{
G400_A3 = 0,
G400_A4,
G400_A4R,
G400_A5,
G400_A5R,
G400_A6,
G400_A6R,
G400_B4,
G400_B5,
G400_B5R,
G400_B6,
G400_B6R,
G400_DOUBLELETTER,
G400_LEGAL,
G400_LETTER,
G400_LETTERR,
G400_LONGLETTER = 16,
G400_MAXSIZE = 16,
G400_AUTO = 16,
G400_MAXAUTO = 16
};
//#define SAVE_TO_FILE
}
#pragma pack(pop)
static struct Paper_Map
{
int paper;
TwSS type;
int dev_value;
}paper_map_3399[] =
{
{PAPER_A3, TwSS::A3, setting3399::G400_A3},
{PAPER_8K, TwSS::K8, 0},
{PAPER_A4, TwSS::A4, setting3399::G400_A4},
{PAPER_A4_LATERAL, TwSS::A4, setting3399::G400_A4R},
{PAPER_16K, TwSS::K16, 0},
{PAPER_16K_LATERAL, TwSS::K16, 0},
{PAPER_A5, TwSS::A5, setting3399::G400_A5},
{PAPER_A5_LATERAL, TwSS::A5, setting3399::G400_A5R},
{PAPER_A6, TwSS::A6, setting3399::G400_A6},
{PAPER_A6_LATERAL, TwSS::A6, setting3399::G400_A6R},
{PAPER_B4, TwSS::B4, setting3399::G400_B4},
{PAPER_B5, TwSS::B5, setting3399::G400_B5},
{PAPER_B5_LATERAL, TwSS::B5, setting3399::G400_B5R},
{PAPER_B6, TwSS::B6, setting3399::G400_B6},
{PAPER_B6_LATERAL, TwSS::B6, setting3399::G400_B6R},
{PAPER_LETTER, TwSS::USLetter, setting3399::G400_LETTER},
{PAPER_LETTER_LATERAL, TwSS::USLetter, setting3399::G400_LETTERR},
{PAPER_DOUBLE_LETTER, TwSS::USLedger, setting3399::G400_DOUBLELETTER},
{PAPER_LEGAL, TwSS::USLegal, setting3399::G400_LEGAL},
{PAPER_AUTO_MATCH, TwSS::None, 0},
{PAPER_MAX_SIZE_CLIP, TwSS::USStatement, setting3399::G400_MAXAUTO},
{PAPER_MAX_SIZE, TwSS::MaxSize, setting3399::G400_MAXSIZE},
{PAPER_TRIGEMINY, TwSS::Trigeminy, setting3399::G400_LONGLETTER}
},
paper_map_dsp[] =
{
{PAPER_A3, TwSS::A3, 0},
{PAPER_8K, TwSS::K8, 0},
{PAPER_A4, TwSS::A4, 1},
{PAPER_A4_LATERAL, TwSS::A4, 2},
{PAPER_16K, TwSS::K16, 0},
{PAPER_16K_LATERAL, TwSS::K16, 0},
{PAPER_A5, TwSS::A5, 2},
{PAPER_A5_LATERAL, TwSS::A5, 2},
{PAPER_A6, TwSS::A6, 2},
{PAPER_A6_LATERAL, TwSS::A6, 2},
{PAPER_B4, TwSS::B4, 0},
{PAPER_B5, TwSS::B5, 0},
{PAPER_B5_LATERAL, TwSS::B5, 1},
{PAPER_B6, TwSS::B6, 2},
{PAPER_B6_LATERAL, TwSS::B6, 2},
{PAPER_LETTER, TwSS::USLetter, 14},
{PAPER_LETTER_LATERAL, TwSS::USLetter, 1},
{PAPER_DOUBLE_LETTER, TwSS::USLedger, 2},
{PAPER_LEGAL, TwSS::USLegal, 0},
{PAPER_AUTO_MATCH, TwSS::None, 0},
{PAPER_MAX_SIZE_CLIP, TwSS::USStatement, 16},
{PAPER_MAX_SIZE, TwSS::MaxSize, 16},
{PAPER_TRIGEMINY, TwSS::Trigeminy, 16}
},
paper_map_3288[] =
{
{PAPER_A3, TwSS::A3, setting3288dsp::G400_A3},
{PAPER_A4, TwSS::A4, setting3288dsp::G400_A4},
{PAPER_A4_LATERAL, TwSS::A4, setting3288dsp::G400_A4R},
{PAPER_A5, TwSS::A5, setting3288dsp::G400_A5},
{PAPER_A5_LATERAL, TwSS::A5, setting3288dsp::G400_A5R},
{PAPER_A6, TwSS::A6, setting3288dsp::G400_A6},
{PAPER_A6_LATERAL, TwSS::A6, setting3288dsp::G400_A6R},
{PAPER_B4, TwSS::B4, setting3288dsp::G400_B4},
{PAPER_B5, TwSS::B5, setting3288dsp::G400_B5},
{PAPER_B5_LATERAL, TwSS::B5, setting3288dsp::G400_B5R},
{PAPER_B6, TwSS::B6, setting3288dsp::G400_B6},
{PAPER_B6_LATERAL, TwSS::B6, setting3288dsp::G400_B6R},
{PAPER_LETTER, TwSS::USLetter, setting3288dsp::G400_LETTER},
{PAPER_LETTER_LATERAL, TwSS::USLetter, setting3288dsp::G400_LETTERR},
{PAPER_DOUBLE_LETTER, TwSS::USLedger, setting3288dsp::G400_DOUBLELETTER},
{PAPER_LEGAL, TwSS::USLegal, setting3288dsp::G400_LEGAL},
{PAPER_AUTO_MATCH, TwSS::None, setting3288dsp::G400_A3},
{PAPER_MAX_SIZE_CLIP, TwSS::USStatement, setting3288dsp::G400_MAXSIZE},
{PAPER_MAX_SIZE, TwSS::MaxSize, setting3288dsp::G400_MAXSIZE},
{PAPER_TRIGEMINY, TwSS::MaxSize, setting3288dsp::G400_LONGLETTER},
};