diff --git a/hgdriver/ImageProcess/CISTestImageProcess.cpp b/hgdriver/ImageProcess/CISTestImageProcess.cpp new file mode 100644 index 0000000..8a2816b --- /dev/null +++ b/hgdriver/ImageProcess/CISTestImageProcess.cpp @@ -0,0 +1,142 @@ +#include "CISTestImageProcess.h" + +int CISTestImageProcess::test(const cv::Mat& image, CISTestResult& result) +{ + std::vector marks; + findMarks(image, marks); + return 0; +} + +CISTestImageProcess::CISTestImageProcess() +{ +} + +void CISTestImageProcess::findContours(const cv::Mat& src, std::vector>& contours, + std::vector& hierarchy, int retr, int method, cv::Point offset) +{ +#if CV_VERSION_REVISION <= 6 + CvMat c_image = src; +#else + CvMat c_image; + c_image = cvMat(src.rows, src.cols, src.type(), src.data); + c_image.step = src.step[0]; + c_image.type = (c_image.type & ~cv::Mat::CONTINUOUS_FLAG) | (src.flags & cv::Mat::CONTINUOUS_FLAG); +#endif + cv::MemStorage storage(cvCreateMemStorage()); + CvSeq* _ccontours = nullptr; + +#if CV_VERSION_REVISION <= 6 + cvFindContours(&c_image, storage, &_ccontours, sizeof(CvContour), retr, method, CvPoint(offset)); +#else + cvFindContours(&c_image, storage, &_ccontours, sizeof(CvContour), retr, method, CvPoint{ offset.x, offset.y }); +#endif + if (!_ccontours) + { + contours.clear(); + return; + } + cv::Seq all_contours(cvTreeToNodeSeq(_ccontours, sizeof(CvSeq), storage)); + size_t total = all_contours.size(); + contours.resize(total); + + cv::SeqIterator it = all_contours.begin(); + for (size_t i = 0; i < total; i++, ++it) + { + CvSeq* c = *it; + reinterpret_cast(c)->color = static_cast(i); + int count = c->total; + int* data = new int[static_cast(count * 2)]; + cvCvtSeqToArray(c, data); + for (int j = 0; j < count; j++) + { + contours[i].push_back(cv::Point(data[j * 2], data[j * 2 + 1])); + } + delete[] data; + } + + hierarchy.resize(total); + it = all_contours.begin(); + for (size_t i = 0; i < total; i++, ++it) + { + CvSeq* c = *it; + int h_next = c->h_next ? reinterpret_cast(c->h_next)->color : -1; + int h_prev = c->h_prev ? reinterpret_cast(c->h_prev)->color : -1; + int v_next = c->v_next ? reinterpret_cast(c->v_next)->color : -1; + int v_prev = c->v_prev ? reinterpret_cast(c->v_prev)->color : -1; + hierarchy[i] = cv::Vec4i(h_next, h_prev, v_next, v_prev); + } + + storage.release(); +} + +int CISTestImageProcess::findPaperContour(const std::vector>& contours, const std::vector& hierarchy, cv::RotatedRect& paperRect) +{ + std::vector maxContour; + if (contours.size() < 1) return {}; + + for (size_t i = 0, length = hierarchy.size(); i < length; i++) + if (hierarchy[i][3] == -1) + for (const auto& item : contours[i]) + maxContour.push_back(item); + + if (maxContour.size() == 0) + return -1; + + paperRect = cv::minAreaRect(maxContour); + if (paperRect.angle < -45) + { + paperRect.angle += 90; + float temp = paperRect.size.width; + paperRect.size.width = paperRect.size.height; + paperRect.size.height = temp; + } + if (paperRect.angle > 45) + { + paperRect.angle -= 90; + float temp = paperRect.size.width; + paperRect.size.width = paperRect.size.height; + paperRect.size.height = temp; + } + + return 0; +} + +int CISTestImageProcess::classfiyContours(const std::vector>& contours, std::vector>& marks, + std::vector>& colorBlocks, + std::vector>& grayBlocks) +{ + marks.clear(); + colorBlocks.clear(); + grayBlocks.clear(); + for (size_t i = 0; i < contours.size(); i++) + { + double area = cv::contourArea(contours[i]); + } + + return 0; +} + +int CISTestImageProcess::findMarks(const cv::Mat& image, std::vector& marks) +{ + int res = 0; + cv::Mat thre; + if (image.channels() != 1) + { + cv::cvtColor(image, thre, cv::COLOR_BGR2GRAY); + cv::threshold(thre, thre, 127, 255, cv::THRESH_BINARY); + } + else + cv::threshold(image, thre, 127, 255, cv::THRESH_BINARY); + + std::vector> contours; + std::vector hierarchy; + findContours(thre, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_SIMPLE); + + cv::RotatedRect paperRect; + res = findPaperContour(contours, hierarchy, paperRect); + + if (res != 0) + return res; + + return res; +} diff --git a/hgdriver/ImageProcess/CISTestImageProcess.h b/hgdriver/ImageProcess/CISTestImageProcess.h new file mode 100644 index 0000000..771d0c6 --- /dev/null +++ b/hgdriver/ImageProcess/CISTestImageProcess.h @@ -0,0 +1,74 @@ +#ifndef CIS_TEST_IMAGE_PROCESS_H +#define CIS_TEST_IMAGE_PROCESS_H + +#include + +class CISTestImageProcess +{ +public: + + struct CISTestResult + { + double scaleXY1; //圆1横纵比 + double scaleXY2; //圆2横纵比 + double scaleXY3; //圆3横纵比 + + uchar colorBlock1[3]; //彩色色块1RGB + uchar colorBlock2[3]; //彩色色块2RGB + uchar colorBlock3[3]; //彩色色块3RGB + uchar colorBlock4[3]; //彩色色块4RGB + uchar colorBlock5[3]; //彩色色块5RGB + uchar colorBlock6[3]; //彩色色块6RGB + uchar colorBlock7[3]; //彩色色块7RGB + uchar colorBlock8[3]; //彩色色块8RGB + uchar colorBlock9[3]; //彩色色块9RGB + + uchar grayBlock1; //灰度色块1灰度值 + uchar grayBlock2; //灰度色块2灰度值 + uchar grayBlock3; //灰度色块3灰度值 + uchar grayBlock4; //灰度色块4灰度值 + uchar grayBlock5; //灰度色块5灰度值 + uchar grayBlock6; //灰度色块6灰度值 + uchar grayBlock7; //灰度色块7灰度值 + uchar grayBlock8; //灰度色块8灰度值 + uchar grayBlock9; //灰度色块9灰度值 + }; + + static int test(const cv::Mat& image, CISTestResult& result); +private: + CISTestImageProcess(); + + /// + /// 获取连通区域轮廓 + /// + /// 源图像 + /// 结果轮廓集 + /// 轮廓集的排序关系。与contours的数量对应,受retr选项不同,排序会有变化 + /// 轮廓集排序方式,默认为链式排序 + /// 查找算法选择,默认为普通查找 + /// 查找起始点,默认为(0,0)点 + static void findContours(const cv::Mat& src, std::vector>& contours, std::vector& hierarchy, + int retr = cv::RETR_LIST, int method = cv::CHAIN_APPROX_SIMPLE, cv::Point offset = cv::Point(0, 0)); + + /// + /// + /// + /// + /// + /// + /// + static int findPaperContour(const std::vector>& contours, const std::vector& hierarchy, cv::RotatedRect& paperRect); + + static int classfiyContours(const std::vector>& contours, std::vector>& marks, + std::vector>& colorBlocks, + std::vector>& grayBlocks); + + /// + /// + /// + /// + /// + static int findMarks(const cv::Mat& image, std::vector& marks); +}; + +#endif \ No newline at end of file diff --git a/hgdriver/ImageProcess/ImageApplyHeaders.h b/hgdriver/ImageProcess/ImageApplyHeaders.h index 540d4f8..35fa5ab 100644 --- a/hgdriver/ImageProcess/ImageApplyHeaders.h +++ b/hgdriver/ImageProcess/ImageApplyHeaders.h @@ -30,4 +30,5 @@ #include "ImageMulti.h" #include "ImageMultiOutputRed.h" #include "ImageApplySplit.h" +#include "CISTestImageProcess.h" #endif diff --git a/hgdriver/hgdev/common_setting.h b/hgdriver/hgdev/common_setting.h index fff3842..638ba1c 100644 --- a/hgdriver/hgdev/common_setting.h +++ b/hgdriver/hgdev/common_setting.h @@ -633,7 +633,7 @@ namespace setting_hardware unsigned int is_fixedpaper : 1; // unsigned int en_anlogic_key : 1; // unsigned int en_autosize : 1; // - unsigned int pc_correct : 1; // 鏄惁鍦≒C绔牎姝 + unsigned int pc_correct : 1; // 鏄惁鍦≒C绔牎姝 1:涓嶆牎姝 cis鍘熷浘锛0:鏍℃ unsigned int enable_sizecheck : 1; // 鏄惁杩涜灏哄妫娴 unsigned int enabledsp_cache : 1; // 鏄惁鍦ㄧ墖涓婄紦瀛 unsigned int sizeerror_errorratio : 9; // 骞呴潰妫娴 @@ -651,7 +651,8 @@ namespace setting_hardware unsigned int stable_enbale : 1; unsigned int screw_detect_enable : 1; unsigned int screw_detect_level : 3; - unsigned int unused_one : 6; + unsigned int isCorrect : 1; //璁剧疆0 涓哄師鍥撅紝1涓烘牎姝e悗鐨勫浘 + unsigned int unused_one : 5; unsigned int pc_correct : 1; unsigned int enable_sizecheck : 1; unsigned int unused_two : 10; @@ -685,7 +686,7 @@ namespace setting_hardware unsigned int enableSizeDetect : 1; unsigned int lutmode : 1; // 璁剧疆鏂囨湰鍜岀収鐗囨ā寮忥紝 0 - 鏂囨湰锛1 - 鐓х墖銆傞粯璁ゅ间负鈥0鈥 unsigned int reversed1 : 4; - unsigned int isCorrect : 1; + unsigned int isCorrect : 1; //璁剧疆0 涓哄師鍥撅紝1涓烘牎姝e悗鐨勫浘 unsigned int dstHeight : 8; unsigned int reversed2 : 6; }params_3288; @@ -738,47 +739,164 @@ namespace setting3288dsp enum tagUsbKeyWords { + //鏃犲懡浠 NO_COMMAND = 0, + //鑾峰彇dsp 鐘舵 GET_DSP_STATUS = 1, + //鍙栧浘 GET_IMAGE = 2, + //閿姣丏SP涓┗瀛樼殑鍥 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, - GET_PAPER_STATUS = 0x0d, + //涓嬪彂鍏冨櫒浠堕厤缃弬鏁帮紙鐏板害锛孡ED 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 = 30, - CLR_ROLLER_NUM = 31, - START_COMMAND_COUNT = 38, - SET_SLEEP_TIME = 39, - GET_SLEEP_TIME = 40, - CLR_HARDWARE_CACHE = 41, - - CHECK_IS_SLEEP = 0x100, + //鑾峰彇婊氳酱鏁 + GET_ROLLER_NUM = 0x1e, + //娓呴浂婊氳酱鏁 + CLR_ROLLER_NUM = 0x1f, + //娓呴櫎鎵弿鎬诲紶鏁 + CLR_SCAN_NUM = 0x20, + //鍑嗗鏇存柊鍥轰欢 + PRE_UPGRADE = 0X21, + //寮濮嬫洿鏂板浐浠 + START_UPGRADE = 0x22, + //褰╄壊鐨凙D鍙傛暟 + RGB_ADI_PARA = 0x23, + //鐏板害鐨凙D鍙傛暟 + 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, + //閲囬泦鏉縁PGA鍥轰欢鐗堟湰 + GET_SCANFPGA_VERSION = 0x2e, + //鐢垫満鏉縁PGA鍥轰欢鐗堟湰 + 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, + //鍙戦乴og鏂囦欢瀹屾垚 + 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 { diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index d6c8933..e1f2cb3 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -155,7 +155,8 @@ hg_scanner::hg_scanner(ScannerSerial serial , isremove_left_hole_threshold(0), isremove_right_hole_threshold(0), isremove_top_hole_threshold(0), isremove_low_hole_threshold(0) , dump_usb_path_(""),is_kernelsnap_211209_(false), pid_(0), dump_img_(&hg_scanner::dump_image_empty), is_kernelsnap_220830_(false),is_kernelsnap3288_221106_(false) , is_kernelsnap_221027_(false), memory_size_(1024/*USB+JPEG鍘嬬缉鍙婂浘鍍忓鐞嗗浘闃熷垪锛屾诲叡1GB*/), isx86_Advan_(true), stop_fatal_(SCANNER_ERR_OK), is_auto_paper_scan(false) - ,size_check(false), save_sleeptime_type_(false), is_kernelsnap_devsislock(false), is_checksum_strat_scan(false) + , size_check(false), save_sleeptime_type_(false), is_kernelsnap_devsislock(false), is_checksum_strat_scan(false), is_cis_image(false) + , is_dpi_color_check(false),save_dpi_color_check_val(0.0f) { #if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64) isx86_Advan_ = false; @@ -2221,6 +2222,10 @@ int hg_scanner::on_is_auto_paper(bool isautopaper) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner::on_cis_get_image(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} void hg_scanner::on_device_reconnected(void) { std::lock_guard lock(io_lock_); @@ -2292,7 +2297,7 @@ hg_imgproc::IMGPRCPARAM hg_scanner::get_image_process_object(int model) param.color_mode = image_prc_param_.bits.color_mode == COLOR_MODE_AUTO_MATCH ? 2 : image_prc_param_.bits.color_mode; param.double_side = img_conf_.is_duplex; param.dpi = img_conf_.resolution_dst; - + param.cis_image = is_dpi_color_check || is_cis_image; //img_conf_.brightness = (float)bright_; //img_conf_.contrast = (float)contrast_; @@ -3203,14 +3208,12 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) sleeptime = 120; break; case SANE_POWER_MINUTES_240: - sleeptime = 14424000; + sleeptime = 240; break; case SANE_POWER_SHUTDOWN: - set_devshtudown(); - break; + return set_devshtudown(); case SANE_POWER_RESTART: - set_devreboot(); - break; + return set_devreboot(val); default: sleeptime = -1; break; @@ -3347,6 +3350,26 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) { return get_scan_mode(*((bool*)data)); } + else if (code == IO_CTRL_CODE_SET_ULTRASONIC_MODULE) + { + return on_ultrasonic_check_changed(*((bool*)data)); + } + else if (code == IO_CTRL_CODE_SET_SPEED_MODE) + { + return set_speed_mode(*((int*)data)); + } + else if (code == IO_CTRL_CODE_SET_CIS_IMAGE) + { + return on_cis_get_image(*((bool*)data)); + } + else if(code == IO_CTRL_CODE_GET_IMAGE) + { + return start();; + } + else if (code == IO_CTRL_CODE_GET_DPI_COLOR_CHECK_VAL) + { + return set_dpi_color_check(*((bool*)data)); + } return SCANNER_ERR_DEVICE_NOT_SUPPORT; } std::string hg_scanner::get_firmware_version(void) @@ -3369,7 +3392,7 @@ int hg_scanner::get_device_log(string &log) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } -int hg_scanner::set_devreboot() +int hg_scanner::set_devreboot(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } @@ -3417,6 +3440,24 @@ int hg_scanner::get_scan_mode(bool& type) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner::set_speed_mode(int data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner::set_dpi_color_check(bool type) +{ + is_dpi_color_check = type; + int ret = SCANNER_ERR_OK; + if (type) + { + ret = set_leaflet_scan(); + } + return ret; +} +int hg_scanner::set_dpi_color_check_val(void) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} ////////////////////////////////////////////////////////////////////////////////////////////////////// int hg_scanner::set_leaflet_scan(void) { @@ -3516,169 +3557,183 @@ void hg_scanner::image_process(std::shared_ptr& buffer) hg_imgproc::decode(ImagePrc_pHandle_, pid_, &img_conf_, ¶m); (this->*dump_img_)(ImagePrc_pHandle_, "decode"); - if ((isremove_left_hole || isremove_right_hole || isremove_top_hole || isremove_low_hole) && (pid_ != 0x239 && pid_ != 0x439)) + if (param.cis_image) { - ret = hg_imgproc::fillhole(ImagePrc_pHandle_, isremove_top_hole_threshold, isremove_low_hole_threshold, isremove_left_hole_threshold, isremove_right_hole_threshold); - (this->*dump_img_)(ImagePrc_pHandle_, "fillhole"); - } - - if (pid_ != 0x239 && pid_ != 0x439) - { - float dpi3288 = (img_conf_.resolution_dst < 300 && is_kernelsnap3288_221106_) ? 200 : 300; - ret = hg_imgproc::auto_crop(ImagePrc_pHandle_, dpi3288); - (this->*dump_img_)(ImagePrc_pHandle_, "auto_crop"); - } - - - if ((img_conf_.is_autodiscradblank_normal || img_conf_.is_autodiscradblank_vince) && (pid_ != 0x239 && pid_ != 0x439)) - { - ret = hg_imgproc::discardBlank(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "discardBlank"); - } - - if (img_conf_.fadeback) //239 - { - hg_imgproc::fadeback(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "fadeback"); - } - - if (((img_conf_.resolution_dst != img_conf_.resolution_native) && (pid_ != 0x239 && pid_ != 0x439) && !is_kernelsnap3288_221106_) - || (is_kernelsnap3288_221106_ && img_conf_.resolution_dst > 200)) - { - float dpi3288 = (img_conf_.resolution_dst < 300 && is_kernelsnap3288_221106_) ? 200 : 300; - - hg_imgproc::resolution_change(ImagePrc_pHandle_, dpi3288); - (this->*dump_img_)(ImagePrc_pHandle_, "resolution_change"); - } - - if ((img_conf_.cropRect.enable && !img_conf_.is_autocrop) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::croprect(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "resolution_change"); - } - - if ((img_conf_.filter != ColorFilter::FILTER_NONE - && (image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE - || image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY)) - && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::channel(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "filter"); - } - - { - adjust_color(ImagePrc_pHandle_); //鑹茶皟鏇茬嚎 鏅歞sp鐗堟湰闇瑕佺煫姝i鑹 - (this->*dump_img_)(ImagePrc_pHandle_, "adjust_color"); - } - - if ((img_conf_.pixtype == COLOR_MODE_24_BITS && img_conf_.hsvcorrect) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::answerSheetFilterRed(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "answerSheetFilterRed"); - } - - if ((img_conf_.refuseInflow) && (pid_ != 0x239 && pid_ != 0x439)) - { - int lv = 5; - - if (image_prc_param_.bits.is_permeate_lv_ == 0) - lv = 5; - else if (image_prc_param_.bits.is_permeate_lv_ == 1) - lv = 15; - else if (image_prc_param_.bits.is_permeate_lv_ == 2) - lv = 25; - else if (image_prc_param_.bits.is_permeate_lv_ == 3) - lv = 35; - else if (image_prc_param_.bits.is_permeate_lv_ == 4) - lv = 45; - - hg_imgproc::antiInflow(ImagePrc_pHandle_, lv); - (this->*dump_img_)(ImagePrc_pHandle_, "antiInflow"); - } - if ((img_conf_.colorCorrection && img_conf_.pixtype != COLOR_MODE_BLACK_WHITE) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::colorCorrection(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "colorCorrection"); - } - - - if (((img_conf_.imageRotateDegree != TEXT_DIRECTION_0 || img_conf_.is_backrotate180) && (!img_conf_.is_autotext)) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::orentation(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "orentation"); - } - - if ((img_conf_.removeMorr) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::textureRemove(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "textureRemove"); - } - - if ((img_conf_.detachnoise.is_detachnoise) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::nosieDetach(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "nosieDetach"); - } - - if ((img_conf_.pixtype == COLOR_MODE_BLACK_WHITE) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::errorextention(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "errorextention"); - } - - if (((img_conf_.en_fold && pid_ != 0x239 && pid_ != 0x439))) - { - hg_imgproc::fold(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "fold"); - } - - if (img_conf_.multi_output_red && img_conf_.pixtype == COLOR_MODE_24_BITS)//239 - { - err = hg_imgproc::multi_out_red(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "multi_out_red"); - } - - if ((img_conf_.sharpen) && (pid_ != 0x239 && pid_ != 0x439)) - { - hg_imgproc::sharpenType(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "sharpenType"); - } - - if (image_prc_param_.bits.split) //239 - { - split3399_++; - err = hg_imgproc::split(ImagePrc_pHandle_,split3399_); - (this->*dump_img_)(ImagePrc_pHandle_, "split"); - } - - if (!img_conf_.splitImage || !img_conf_.multi_output_red || !is_multiout) //239 - { - if (img_conf_.automaticcolor) + if (is_dpi_color_check) { - hg_imgproc::auto_matic_color(ImagePrc_pHandle_, img_conf_.automaticcolortype); - (this->*dump_img_)(ImagePrc_pHandle_, "auto_matic_color"); + CISTestImageProcess::CISTestResult res; + err = hg_imgproc::cis_test_image(ImagePrc_pHandle_, res); + save_dpi_color_check_val = res.scaleXY1; + + set_dpi_color_check_val(); } } - if (img_conf_.is_autotext)//239 + else { - //hg_imgproc::ocr_auto_txtdirect(ImagePrc_pHandle_); - hg_imgproc::tesseract_auto_txtdirect(ImagePrc_pHandle_); - (this->*dump_img_)(ImagePrc_pHandle_, "ocr_auto_txtdirect"); - } + if ((isremove_left_hole || isremove_right_hole || isremove_top_hole || isremove_low_hole) && (pid_ != 0x239 && pid_ != 0x439)) + { + ret = hg_imgproc::fillhole(ImagePrc_pHandle_, isremove_top_hole_threshold, isremove_low_hole_threshold, isremove_left_hole_threshold, isremove_right_hole_threshold); + (this->*dump_img_)(ImagePrc_pHandle_, "fillhole"); + } + + if (pid_ != 0x239 && pid_ != 0x439) + { + float dpi3288 = (img_conf_.resolution_dst < 300 && is_kernelsnap3288_221106_) ? 200 : 300; + ret = hg_imgproc::auto_crop(ImagePrc_pHandle_, dpi3288); + (this->*dump_img_)(ImagePrc_pHandle_, "auto_crop"); + } - if (is_quality_ == IMG_SPEED && resolution_ >= 300)//239 - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "set resolution_ is :%d\n", resolution_) - err = hg_imgproc::quality(ImagePrc_pHandle_, resolution_); - (this->*dump_img_)(ImagePrc_pHandle_, "quality"); - } + if ((img_conf_.is_autodiscradblank_normal || img_conf_.is_autodiscradblank_vince) && (pid_ != 0x239 && pid_ != 0x439)) + { + ret = hg_imgproc::discardBlank(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "discardBlank"); + } - if (is_multiout)//239 - { - int multi_out = img_conf_.multiOutput; - err = hg_imgproc::multi_out(ImagePrc_pHandle_, multi_out); - (this->*dump_img_)(ImagePrc_pHandle_, "multi_out"); + if (img_conf_.fadeback) //239 + { + hg_imgproc::fadeback(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "fadeback"); + } + + if (((img_conf_.resolution_dst != img_conf_.resolution_native) && (pid_ != 0x239 && pid_ != 0x439) && !is_kernelsnap3288_221106_) + || (is_kernelsnap3288_221106_ && img_conf_.resolution_dst > 200)) + { + float dpi3288 = (img_conf_.resolution_dst < 300 && is_kernelsnap3288_221106_) ? 200 : 300; + + hg_imgproc::resolution_change(ImagePrc_pHandle_, dpi3288); + (this->*dump_img_)(ImagePrc_pHandle_, "resolution_change"); + } + + if ((img_conf_.cropRect.enable && !img_conf_.is_autocrop) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::croprect(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "resolution_change"); + } + + if ((img_conf_.filter != ColorFilter::FILTER_NONE + && (image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE + || image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY)) + && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::channel(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "filter"); + } + + { + adjust_color(ImagePrc_pHandle_); //鑹茶皟鏇茬嚎 鏅歞sp鐗堟湰闇瑕佺煫姝i鑹 + (this->*dump_img_)(ImagePrc_pHandle_, "adjust_color"); + } + + if ((img_conf_.pixtype == COLOR_MODE_24_BITS && img_conf_.hsvcorrect) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::answerSheetFilterRed(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "answerSheetFilterRed"); + } + + if ((img_conf_.refuseInflow) && (pid_ != 0x239 && pid_ != 0x439)) + { + int lv = 5; + + if (image_prc_param_.bits.is_permeate_lv_ == 0) + lv = 5; + else if (image_prc_param_.bits.is_permeate_lv_ == 1) + lv = 15; + else if (image_prc_param_.bits.is_permeate_lv_ == 2) + lv = 25; + else if (image_prc_param_.bits.is_permeate_lv_ == 3) + lv = 35; + else if (image_prc_param_.bits.is_permeate_lv_ == 4) + lv = 45; + + hg_imgproc::antiInflow(ImagePrc_pHandle_, lv); + (this->*dump_img_)(ImagePrc_pHandle_, "antiInflow"); + } + if ((img_conf_.colorCorrection && img_conf_.pixtype != COLOR_MODE_BLACK_WHITE) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::colorCorrection(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "colorCorrection"); + } + + + if (((img_conf_.imageRotateDegree != TEXT_DIRECTION_0 || img_conf_.is_backrotate180) && (!img_conf_.is_autotext)) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::orentation(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "orentation"); + } + + if ((img_conf_.removeMorr) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::textureRemove(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "textureRemove"); + } + + if ((img_conf_.detachnoise.is_detachnoise) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::nosieDetach(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "nosieDetach"); + } + + if ((img_conf_.pixtype == COLOR_MODE_BLACK_WHITE) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::errorextention(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "errorextention"); + } + + if (((img_conf_.en_fold && pid_ != 0x239 && pid_ != 0x439))) + { + hg_imgproc::fold(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "fold"); + } + + if (img_conf_.multi_output_red && img_conf_.pixtype == COLOR_MODE_24_BITS)//239 + { + err = hg_imgproc::multi_out_red(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "multi_out_red"); + } + + if ((img_conf_.sharpen) && (pid_ != 0x239 && pid_ != 0x439)) + { + hg_imgproc::sharpenType(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "sharpenType"); + } + + if (image_prc_param_.bits.split) //239 + { + split3399_++; + err = hg_imgproc::split(ImagePrc_pHandle_,split3399_); + (this->*dump_img_)(ImagePrc_pHandle_, "split"); + } + + if (!img_conf_.splitImage || !img_conf_.multi_output_red || !is_multiout) //239 + { + if (img_conf_.automaticcolor) + { + hg_imgproc::auto_matic_color(ImagePrc_pHandle_, img_conf_.automaticcolortype); + (this->*dump_img_)(ImagePrc_pHandle_, "auto_matic_color"); + } + } + if (img_conf_.is_autotext)//239 + { + //hg_imgproc::ocr_auto_txtdirect(ImagePrc_pHandle_); + hg_imgproc::tesseract_auto_txtdirect(ImagePrc_pHandle_); + (this->*dump_img_)(ImagePrc_pHandle_, "ocr_auto_txtdirect"); + } + + if (is_quality_ == IMG_SPEED && resolution_ >= 300)//239 + { + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "set resolution_ is :%d\n", resolution_) + err = hg_imgproc::quality(ImagePrc_pHandle_, resolution_); + + (this->*dump_img_)(ImagePrc_pHandle_, "quality"); + } + + if (is_multiout)//239 + { + int multi_out = img_conf_.multiOutput; + err = hg_imgproc::multi_out(ImagePrc_pHandle_, multi_out); + (this->*dump_img_)(ImagePrc_pHandle_, "multi_out"); + } } hg_imgproc::final(ImagePrc_pHandle_); diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index dbeab49..bc6c2d9 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -242,25 +242,29 @@ protected: int setting_isremove_low_hole_threshold(void* data); int setting_fold_type(void* data); - 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); - virtual int on_get_feedmode(int& feedmode); //鑾峰彇鍒嗙焊寮哄害 - virtual int on_set_feedmode(int feedmode); //璁剧疆鍒嗙焊寮哄害 - virtual int on_pic_type(bool& pic); //鐓х墖妯″紡鎴栬呮枃鏈ā寮 - virtual int on_pick_paper(bool autostrength); //璁剧疆鎼撶焊浣胯兘 - virtual int on_pick_paper_threshold(double threshold); //璁剧疆鎼撶焊闃堝 - virtual int on_is_auto_paper(bool isautopaper); //寰呯焊鎵弿 - -protected: virtual void on_device_reconnected(void); + virtual int on_scanner_closing(bool force); + + + virtual int on_color_mode_changed(int& color_mode) = 0; // COLOR_MODE_xxx + virtual int on_paper_changed(int& paper) = 0; // PAPER_xxx + virtual int on_paper_check_changed(bool& check)=0; + virtual int on_resolution_changed(int& dpi)=0; + virtual int on_ultrasonic_check_changed(bool& check)=0; + virtual int on_staple_check_changed(bool& check) = 0; + virtual int on_skew_check_changed(bool& check) = 0; + virtual int on_skew_check_level_changed(int& check) = 0; + virtual int on_get_feedmode(int& feedmode) = 0; //鑾峰彇鍒嗙焊寮哄害 + virtual int on_set_feedmode(int feedmode) = 0; //璁剧疆鍒嗙焊寮哄害 + virtual int on_pic_type(bool& pic) = 0; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 + virtual int on_pick_paper(bool autostrength) = 0; //璁剧疆鎼撶焊浣胯兘 + virtual int on_pick_paper_threshold(double threshold) = 0; //璁剧疆鎼撶焊闃堝 + virtual int on_is_auto_paper(bool isautopaper) = 0; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool type) = 0; +protected: + virtual int set_setting_value(const char* name, void* data, int len); - virtual int on_scanner_closing(bool force); + virtual void thread_handle_usb_read(void) = 0; virtual void thread_handle_islock_read(); int hg_version_init_handle(); @@ -329,6 +333,10 @@ protected: double isremove_top_hole_threshold; //璁剧疆涓婅竟闄ょ┛瀛旈槇鍊 double isremove_low_hole_threshold; //璁剧疆涓嬭竟闄ょ┛瀛旈槇鍊 int fold_type_; //瀵规姌绫诲瀷 + bool is_cis_image; //璁剧疆cis鑾峰彇鍘熷浘 + bool is_dpi_color_check; //绾靛悜DPI銆佽壊宸娴 ,鐣稿彉鑷姩璁$畻 + double save_dpi_color_check_val; //淇濆瓨绾靛悜DPI銆佽壊宸娴 ,鐣稿彉鑷姩璁$畻 鐨勫 + int split3399_; //3399璁惧姝i潰鍜屽弽闈㈠浘鍍忔槸鐩稿鐨勶紝鎵浠ュ鎶樻椂鍙嶉潰闇瑕佽繘琛岀壒娈婂鐞 int pid_; @@ -454,7 +462,7 @@ public: virtual int get_roller_num(int &data) = 0; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) = 0; //鍞ら啋璁惧 virtual int get_device_log(string &log) = 0; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() = 0; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) = 0; //璁剧疆璁惧閲嶅惎 /*/ data:0 reboot data:1 virtual int set_devshtudown() = 0; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) = 0; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) = 0; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -464,6 +472,9 @@ public: virtual int get_dev_islock_file(int &data) = 0; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ virtual int set_dev_islock_file(int data) = 0; //璁剧疆璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣*/ virtual int get_scan_mode(bool& type) ; //鑾峰彇璁惧鏄惁璁℃暟妯″紡 /*/ type:false璁℃暟妯″紡 true闈炶鏁版ā寮 + virtual int set_speed_mode(int data) = 0; //璁剧疆閫熷害妯″紡 /*/ 璁惧涓嶅悓鍊间笉鍚岋紝璇︽儏瑙佸瓙绫绘敞閲 + virtual int set_dpi_color_check(bool type); //鑾峰彇鐣稿彉鐭 + virtual int set_dpi_color_check_val(void) = 0; //璁剧疆鐣稿彉鐭鍊 }; #ifdef UOS diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index ab87a4b..cd5bb0b 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -559,6 +559,28 @@ int hg_scanner_200::on_set_feedmode(int feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_200::on_pic_type(bool& pic) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_200::on_pick_paper(bool autostrength) +{ + return 0; +} +int hg_scanner_200::on_pick_paper_threshold(double threshold) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_200::on_is_auto_paper(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_200::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dsp_config_.params_dsp.isCorrect = isautopaper == true ? 0 : 1; //0璁剧疆鑾峰彇cis鍘熷浘锛1鏍℃涔嬪悗鐨勫浘 + return writedown_device_configuration(); +} int hg_scanner_200::on_get_feedmode(int &feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; @@ -729,7 +751,7 @@ int hg_scanner_200::get_scanner_paperon(SANE_Bool& type) int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::GET_PAPER_STATUS, 0, 0 }; + USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0 }; len = sizeof(USBCB); ret = writeusb(usbcb); @@ -751,7 +773,7 @@ int hg_scanner_200::get_scan_is_sleep(SANE_Bool& type) int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::CHECK_IS_SLEEP, 0, 0 }; + USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 }; len = sizeof(USBCB); ret = writeusb(usbcb); @@ -777,7 +799,7 @@ int hg_scanner_200::get_device_log(string &log) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } -int hg_scanner_200::set_devreboot() +int hg_scanner_200::set_devreboot(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } @@ -813,6 +835,16 @@ int hg_scanner_200::set_dev_islock_file(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } +int hg_scanner_200::set_speed_mode(int data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} + +int hg_scanner_200::set_dpi_color_check_val(void) +{ + return 0; +} + int hg_scanner_200::set_notify_sleep() { return SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/hgdriver/hgdev/hg_scanner_200.h b/hgdriver/hgdev/hg_scanner_200.h index 48ecdb8..9dbf48b 100644 --- a/hgdriver/hgdev/hg_scanner_200.h +++ b/hgdriver/hgdev/hg_scanner_200.h @@ -22,20 +22,25 @@ class hg_scanner_200 : public hg_scanner { void discard_prev(void); - protected: - virtual int on_scanner_closing(bool force) override; virtual void thread_handle_usb_read(void) override; - 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); - virtual int on_get_feedmode(int& feedmode);//鑾峰彇鍒嗙焊寮哄害 - virtual int on_set_feedmode(int feedmode);//璁剧疆鍒嗙焊寮哄害 + virtual int on_scanner_closing(bool force) override; +protected: + virtual int on_color_mode_changed(int& color_mode) override; // COLOR_MODE_xxx + virtual int on_paper_changed(int& paper) override; // PAPER_xxx + virtual int on_paper_check_changed(bool& check) override; + virtual int on_resolution_changed(int& dpi) override; + virtual int on_ultrasonic_check_changed(bool& check) override; + virtual int on_staple_check_changed(bool& check) override; + virtual int on_skew_check_changed(bool& check) override; + virtual int on_skew_check_level_changed(int& check) override; + virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害 + virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害 + virtual int on_pic_type(bool& pic) override; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 + virtual int on_pick_paper(bool autostrength)override; //璁剧疆鎼撶焊浣胯兘 + virtual int on_pick_paper_threshold(double threshold) override; //璁剧疆鎼撶焊闃堝 + virtual int on_is_auto_paper(bool isautopaper) override; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool isautopaper) override; //鑾峰彇cis鍘熷浘 public: hg_scanner_200(const char* dev_name,int vid, usb_io* io); ~hg_scanner_200(); @@ -81,7 +86,7 @@ public: virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() override; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -90,5 +95,6 @@ public: virtual int set_clean_paper_road() override; //娓呯悊绾搁亾 virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ virtual int set_dev_islock_file(int data) override; //璁剧疆璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣*/ - + virtual int set_speed_mode(int data) override; //璁剧疆閫熷害妯″紡 /*/ 涓嶆敮鎸 + virtual int set_dpi_color_check_val(void) override; //璁剧疆鐣稿彉鐭 }; diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 735b1cd..e47c73a 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -160,11 +160,6 @@ hg_scanner_239::hg_scanner_239(const char* dev_name, int pid,usb_io* io) : hg_sc else init_settings((jsontext3 + jsontext4).c_str()); } - //if (init_settings(0x239)) - //init_settings((jsontext1 + jsontext2).c_str()); - //writedown_device_configuration(); // initialize the hardware settings - std::string str = hg_log::get_scanimage_ver(); - printf("str:%s\r\n",str.c_str()); init_version(); hg_version_init_handle(); wait_devsislock_.notify(); @@ -255,6 +250,34 @@ int hg_scanner_239::get_scan_mode(bool &type) //} return ret; } +int hg_scanner_239::set_speed_mode(int data) +{ + return write_register(setting3399::SR_SET_SPEEDMODE, data); +} +int hg_scanner_239::set_dpi_color_check_val(void) +{ + setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_H_200_RATIO; + if (resolution_ <= 200) + ratio = setting3399::SR_SET_H_200_RATIO; + else if (resolution_ > 200 && resolution_ <= 300) + ratio = setting3399::SR_SET_H_300_RATIO; + else if (resolution_ > 300 && resolution_ <= 600) + ratio = setting3399::SR_SET_H_600_RATIO; + + return write_register(ratio, *(int*)&save_dpi_color_check_val); +} +int hg_scanner_239::get_dpi_color_check_val(int &data) +{ + setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_H_200_RATIO; + if (resolution_ <= 200) + ratio = setting3399::SR_GET_H_200_RATIO; + else if (resolution_ > 200 && resolution_ <= 300) + ratio = setting3399::SR_GET_H_300_RATIO; + else if (resolution_ > 300 && resolution_ <= 600) + ratio = setting3399::SR_GET_H_600_RATIO; + int ret = read_register(ratio, &data); + return ret; +} int hg_scanner_239::get_status(void) { int val = 0, @@ -835,11 +858,15 @@ int hg_scanner_239::on_is_auto_paper(bool isautopaper) if (isautopaper) notify_ui_working_status("\345\276\205\347\272\270\346\211\253\346\217\217\347\212\266\346\200\201\344\270\255...", SANE_EVENT_WORKING, status_); - } - return ret; } +int hg_scanner_239::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dev_conf_.params_3399.pc_correct = isautopaper; + return writedown_device_configuration(); +} void hg_scanner_239::on_device_reconnected(void) { int ret = writedown_device_configuration(); @@ -1352,13 +1379,9 @@ int hg_scanner_239::get_device_log(string &logpath) VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s buffersize: %d\n", logpath.c_str(),hg_scanner_err_name(ret),buffersize); return ret; } -int hg_scanner_239::set_devreboot() +int hg_scanner_239::set_devreboot(int data) { - int val = 0, - ret = write_register(setting3399::SR_REBOOT, val); - - if (ret != SCANNER_ERR_OK) - return ret; + return write_register(setting3399::SR_REBOOT, data); } int hg_scanner_239::set_devshtudown() { diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index 1dcaf0a..eb02786 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -45,6 +45,10 @@ class hg_scanner_239 : public hg_scanner void discard_all_images(void); void init_version(void ); +protected: + virtual void on_device_reconnected(void) override; + virtual int on_scanner_closing(bool force) override; + virtual void thread_handle_usb_read(void) override; protected: virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲 virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆 @@ -59,10 +63,10 @@ protected: virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害 virtual int on_pick_paper_threshold(double threshold)override; - virtual int on_is_auto_paper(bool isautopaper); //寰呯焊鎵弿 - virtual void on_device_reconnected(void) override; - virtual int on_scanner_closing(bool force) override; - virtual void thread_handle_usb_read(void) override; + virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇 + + public: hg_scanner_239(const char* dev_name, int pid,usb_io* io); ~hg_scanner_239(); @@ -97,7 +101,7 @@ public: virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() override; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -107,5 +111,9 @@ public: virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ virtual int set_dev_islock_file(int data) override; //璁剧疆璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣*/ virtual int get_scan_mode(bool& type); //鑾峰彇鏄惁鏄鏁版ā寮 /*/ type : fasle璁℃暟妯″紡 true闈炶鏁 */ + + virtual int set_speed_mode(int data) override; //璁剧疆閫熷害妯″紡 /*/ data:100,110,120 + virtual int set_dpi_color_check_val(void) override; //璁剧疆鐣稿彉鐭鍊 + virtual int get_dpi_color_check_val(void); //鑾峰彇鐣稿彉鐭 }; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index a185e93..ba1cf62 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -625,7 +625,7 @@ int hg_scanner_300::get_scanner_paperon(SANE_Bool& type) int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::GET_PAPER_STATUS, 0, 0}; + USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0}; len = sizeof(USBCB); ret = writeusb(usbcb); @@ -647,7 +647,7 @@ int hg_scanner_300::get_scan_is_sleep(SANE_Bool& type) int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::CHECK_IS_SLEEP, 0, 0 }; + USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 }; len = sizeof(USBCB); ret = writeusb(usbcb); @@ -666,7 +666,6 @@ int hg_scanner_300::get_scan_is_sleep(SANE_Bool& type) type = false; //return SCANNER_ERR_DEVICE_SLEEPING; } - return ret; } ///姝ゆ璁惧鏃犳鍔熻兘 @@ -686,6 +685,28 @@ int hg_scanner_300::on_set_feedmode(int feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_300::on_pic_type(bool& pic) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_300::on_pick_paper(bool autostrength) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_300::on_pick_paper_threshold(double threshold) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_300::on_is_auto_paper(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_300::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dsp_config.params_3288.isCorrect = isautopaper == true ? 0 : 1; + return writedown_device_configuration(); +} int hg_scanner_300::on_get_feedmode(int &feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; @@ -694,9 +715,10 @@ int hg_scanner_300::get_device_log(string &log) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } -int hg_scanner_300::set_devreboot() +int hg_scanner_300::set_devreboot(int data) { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; + USBCB usbcb = { setting3288dsp::REBOOT, data ,0 }; + return writeusb(usbcb); } int hg_scanner_300::set_devshtudown() { @@ -730,6 +752,31 @@ int hg_scanner_300::set_dev_islock_file(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_300::set_speed_mode(int data) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::SET_SPEED_MODE,data,len }; + len = sizeof(usbcb); + ret = io_->write_bulk(&usbcb, &len); + return 0; +} +int hg_scanner_300::set_dpi_color_check_val(void) +{ + int ret = SCANNER_ERR_OK, + len = 0; + USBCB usbcb = { setting3288dsp::SET_JUST_COF_H ,1,resolution_ }; + len = sizeof(usbcb); + io_->write_bulk(&usbcb, &len); + + //USBCB cmd = { setting3288dsp::GET_JUST_COF_H ,0,resolution_ }; + //len = sizeof(cmd); + //io_->write_bulk(&cmd, &len); + //io_->read_bulk(&cmd, &len); + //int ratio = cmd.u32_Data; + return ret; +} int hg_scanner_300::set_notify_sleep() { return SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/hgdriver/hgdev/hg_scanner_300.h b/hgdriver/hgdev/hg_scanner_300.h index 229cf63..4c755e6 100644 --- a/hgdriver/hgdev/hg_scanner_300.h +++ b/hgdriver/hgdev/hg_scanner_300.h @@ -23,18 +23,25 @@ class hg_scanner_300 : public hg_scanner { protected: - virtual int on_scanner_closing(bool force) override; + virtual int on_scanner_closing(bool force) override; virtual void thread_handle_usb_read(void) override; - 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); - virtual int on_get_feedmode(int& feedmode);//鑾峰彇鍒嗙焊寮哄害 - virtual int on_set_feedmode(int feedmode);//璁剧疆鍒嗙焊寮哄害 +protected: + virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲 + virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆 + virtual int on_paper_check_changed(bool& check) override; //灏哄妫娴 + virtual int on_resolution_changed(int& dpi) override; //鍒嗚鲸鐜囪缃 + virtual int on_ultrasonic_check_changed(bool& check) override; //璁剧疆瓒呭0娉㈡娴 + virtual int on_staple_check_changed(bool& check) override; //璁剧疆璁功閽堟娴 + virtual int on_skew_check_changed(bool& check) override; //璁剧疆姝枩妫娴 + virtual int on_skew_check_level_changed(int& check) override; //璁剧疆姝枩妫娴嬪己搴 + virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害 + virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害 + virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 + virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害 + virtual int on_pick_paper_threshold(double threshold)override; + virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇 + public: hg_scanner_300(const char* dev_name,int pid, usb_io* io); ~hg_scanner_300(); @@ -81,7 +88,7 @@ public: virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() override; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -90,4 +97,6 @@ public: virtual int set_clean_paper_road() override; //娓呯悊绾搁亾 virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ 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_dpi_color_check_val(void) override; //璁剧疆鐣稿彉鐭 }; diff --git a/hgdriver/hgdev/hg_scanner_302.cpp b/hgdriver/hgdev/hg_scanner_302.cpp index 860b7a3..a158dee 100644 --- a/hgdriver/hgdev/hg_scanner_302.cpp +++ b/hgdriver/hgdev/hg_scanner_302.cpp @@ -831,6 +831,28 @@ int hg_scanner_302::on_set_feedmode(int feedmode)//璁剧疆鍒嗙焊寮哄害 return ret; } +int hg_scanner_302::on_pic_type(bool& pic) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_302::on_pick_paper(bool autostrength) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_302::on_pick_paper_threshold(double threshold) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_302::on_is_auto_paper(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_302::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dev_conf_.params_3399.pc_correct = isautopaper; + return writedown_device_configuration(); +} void hg_scanner_302::on_device_reconnected(void) { int ret = writedown_device_configuration(); @@ -1188,7 +1210,7 @@ int hg_scanner_302::get_device_log(string &log) VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s\n", log.c_str(),hg_scanner_err_name(ret)); return ret; } -int hg_scanner_302::set_devreboot() +int hg_scanner_302::set_devreboot(int data) { int val = 0, ret = write_register(setting3399::SR_REBOOT, val); @@ -1234,6 +1256,22 @@ int hg_scanner_302::set_dev_islock_file(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_302::set_speed_mode(int data) +{ + return write_register(setting3399::SR_SET_SPEEDMODE, data); +} +int hg_scanner_302::set_dpi_color_check_val(void) +{ + setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO; + if (resolution_ <= 200) + retio = setting3399::SR_SET_H_200_RATIO; + else if (resolution_ > 200 && resolution_ <= 300) + retio = setting3399::SR_SET_H_300_RATIO; + else if (resolution_ > 300 && resolution_ <= 600) + retio = setting3399::SR_SET_H_600_RATIO; + + return write_register(retio, *(int*)&save_dpi_color_check_val); +} int hg_scanner_302::set_notify_sleep() { int val = 0, diff --git a/hgdriver/hgdev/hg_scanner_302.h b/hgdriver/hgdev/hg_scanner_302.h index adf5db4..dd40f10 100644 --- a/hgdriver/hgdev/hg_scanner_302.h +++ b/hgdriver/hgdev/hg_scanner_302.h @@ -53,24 +53,27 @@ class hg_scanner_302 : public hg_scanner int read_one_image_from_usb(SANE_Image_Statu statu = SANE_Image_Statu_OK); void discard_all_images(void); - protected: - int on_color_mode_changed(int& color_mode) override; - virtual int on_paper_changed(int& paper) override; - virtual int on_paper_check_changed(bool& check) override; - virtual int on_resolution_changed(int& dpi) override; - - virtual int on_ultrasonic_check_changed(bool& check) override; - virtual int on_staple_check_changed(bool& check) override; - virtual int on_skew_check_changed(bool& check) override; - virtual int on_skew_check_level_changed(int& check) override; - - virtual int on_get_feedmode(int &feedmode);//鑾峰彇鍒嗙焊寮哄害 - virtual int on_set_feedmode(int feedmode);//璁剧疆鍒嗙焊寮哄害 - virtual void on_device_reconnected(void) override; - virtual int on_scanner_closing(bool force) override; + virtual int on_scanner_closing(bool force) override; virtual void thread_handle_usb_read(void) override; +protected: + virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲 + virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆 + virtual int on_paper_check_changed(bool& check) override; //灏哄妫娴 + virtual int on_resolution_changed(int& dpi) override; //鍒嗚鲸鐜囪缃 + virtual int on_ultrasonic_check_changed(bool& check) override; //璁剧疆瓒呭0娉㈡娴 + virtual int on_staple_check_changed(bool& check) override; //璁剧疆璁功閽堟娴 + virtual int on_skew_check_changed(bool& check) override; //璁剧疆姝枩妫娴 + virtual int on_skew_check_level_changed(int& check) override; //璁剧疆姝枩妫娴嬪己搴 + virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害 + virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害 + virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 + virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害 + virtual int on_pick_paper_threshold(double threshold)override; + virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇 + public: hg_scanner_302(const char* dev_name, int pid,usb_io* io); @@ -106,7 +109,7 @@ public: virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() override; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -115,4 +118,6 @@ public: virtual int set_clean_paper_road() override; //娓呯悊绾搁亾 virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ 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_dpi_color_check_val(void) override; //璁剧疆鐣稿彉鐭 }; diff --git a/hgdriver/hgdev/hg_scanner_400.cpp b/hgdriver/hgdev/hg_scanner_400.cpp index 24dbf70..062627b 100644 --- a/hgdriver/hgdev/hg_scanner_400.cpp +++ b/hgdriver/hgdev/hg_scanner_400.cpp @@ -634,14 +634,8 @@ int hg_scanner_400::get_sleep_time(int &getsleepime) } int hg_scanner_400::set_sleep_time(int setsleepime) { - - int ret = SCANNER_ERR_OK, - time = setsleepime; - USBCB usbcb = { setting3288dsp::SET_SLEEP_TIME,time, 0}; - - ret = writeusb(usbcb); - - return ret;; + USBCB usbcb = { setting3288dsp::SET_SLEEP_TIME,setsleepime, 0}; + return writeusb(usbcb); } int hg_scanner_400::get_scanner_paperon(SANE_Bool& type) @@ -649,7 +643,7 @@ int hg_scanner_400::get_scanner_paperon(SANE_Bool& type) int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::GET_PAPER_STATUS, 0, 0 }; + USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0 }; len = sizeof(USBCB); ret = writeusb(usbcb); @@ -671,7 +665,7 @@ int hg_scanner_400::get_scan_is_sleep(SANE_Bool& type) int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::CHECK_IS_SLEEP, 0, 0 }; + USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 }; len = sizeof(USBCB); ret = writeusb(usbcb); @@ -696,20 +690,42 @@ int hg_scanner_400::get_scan_is_sleep(SANE_Bool& type) ///姝ゆ璁惧鏃犳鍔熻兘鏆傛椂棰勭暀 int hg_scanner_400::on_staple_check_changed(bool& check) { - return SCANNER_ERR_OK; + return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_400::on_skew_check_changed(bool& check) { - return SCANNER_ERR_OK; + return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_400::on_skew_check_level_changed(int& check) { - return SCANNER_ERR_OK; + return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_400::on_set_feedmode(int feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_400::on_pic_type(bool& pic) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_400::on_pick_paper(bool autostrength) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_400::on_pick_paper_threshold(double threshold) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_400::on_is_auto_paper(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_400::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dsp_config.params_3288.isCorrect = isautopaper == true ? false : true; //false璁剧疆鑾峰彇cis鍘熷浘锛宼rue鏍℃涔嬪悗鐨勫浘 + return writedown_device_configuration(); +} int hg_scanner_400::on_get_feedmode(int &feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; @@ -719,9 +735,10 @@ int hg_scanner_400::get_device_log(string &log) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } -int hg_scanner_400::set_devreboot() +int hg_scanner_400::set_devreboot(int data) { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; + USBCB usbcb = { setting3288dsp::REBOOT,data ,0 }; + return writeusb(usbcb); } int hg_scanner_400::set_devshtudown() { @@ -755,6 +772,31 @@ int hg_scanner_400::set_dev_islock_file(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_400::set_speed_mode(int data) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::SET_SPEED_MODE,data,len }; + len = sizeof(usbcb); + ret = io_->write_bulk(&usbcb, &len); + return ret; +} +int hg_scanner_400::set_dpi_color_check_val(void) +{ + int ret = SCANNER_ERR_OK, + len = 0; + USBCB usbcb = { setting3288dsp::SET_JUST_COF_H ,1,resolution_ }; + len = sizeof(usbcb); + io_->write_bulk(&usbcb, &len); + + //USBCB cmd = { setting3288dsp::GET_JUST_COF_H ,0,resolution_ }; + //len = sizeof(cmd); + //io_->write_bulk(&cmd, &len); + //io_->read_bulk(&cmd, &len); + //int ratio = cmd.u32_Data; + return ret; +} int hg_scanner_400::set_notify_sleep() { return SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/hgdriver/hgdev/hg_scanner_400.h b/hgdriver/hgdev/hg_scanner_400.h index 0063b6b..01a6429 100644 --- a/hgdriver/hgdev/hg_scanner_400.h +++ b/hgdriver/hgdev/hg_scanner_400.h @@ -23,21 +23,25 @@ class hg_scanner_400 : public hg_scanner { protected: - virtual int on_scanner_closing(bool force) override; + virtual int on_scanner_closing(bool force) override; virtual void thread_handle_usb_read(void) override; +protected: + virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲 + virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆 + virtual int on_paper_check_changed(bool& check) override; //灏哄妫娴 + virtual int on_resolution_changed(int& dpi) override; //鍒嗚鲸鐜囪缃 + virtual int on_ultrasonic_check_changed(bool& check) override; //璁剧疆瓒呭0娉㈡娴 + virtual int on_staple_check_changed(bool& check) override; //璁剧疆璁功閽堟娴 + virtual int on_skew_check_changed(bool& check) override; //璁剧疆姝枩妫娴 + virtual int on_skew_check_level_changed(int& check) override; //璁剧疆姝枩妫娴嬪己搴 + virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害 + virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害 + virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 + virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害 + virtual int on_pick_paper_threshold(double threshold)override; + virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇 - 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); - - virtual int on_get_feedmode(int& feedmode);//鑾峰彇鍒嗙焊寮哄害 - virtual int on_set_feedmode(int feedmode);//璁剧疆鍒嗙焊寮哄害 public: hg_scanner_400(const char* dev_name,int vid, usb_io* io); @@ -87,7 +91,7 @@ public: virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() override; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -96,4 +100,6 @@ public: virtual int set_clean_paper_road() override; //娓呯悊绾搁亾 virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ 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锛80 + virtual int set_dpi_color_check_val(void) override; //璁剧疆鐣稿彉鐭 }; diff --git a/hgdriver/hgdev/hg_scanner_402.cpp b/hgdriver/hgdev/hg_scanner_402.cpp index bf6c9ec..657c38f 100644 --- a/hgdriver/hgdev/hg_scanner_402.cpp +++ b/hgdriver/hgdev/hg_scanner_402.cpp @@ -797,6 +797,28 @@ int hg_scanner_402:: on_set_feedmode(int feedmode)//璁剧疆鍒嗙焊寮哄害 return ret; } +int hg_scanner_402::on_pic_type(bool& pic) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_402::on_pick_paper(bool autostrength) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_402::on_pick_paper_threshold(double threshold) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_402::on_is_auto_paper(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_402::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dev_conf_.params_3399.pc_correct = isautopaper; + return writedown_device_configuration(); +} void hg_scanner_402::on_device_reconnected(void) { int ret = writedown_device_configuration(); @@ -1148,7 +1170,7 @@ int hg_scanner_402::get_device_log(string& log) VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s\n", log.c_str(), hg_scanner_err_name(ret)); return ret; } -int hg_scanner_402::set_devreboot() +int hg_scanner_402::set_devreboot(int data) { int val = 0, ret = write_register(setting3399::SR_REBOOT, val); @@ -1194,6 +1216,22 @@ int hg_scanner_402::set_dev_islock_file(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner_402::set_speed_mode(int data) +{ + return write_register(setting3399::SR_SET_SPEEDMODE, data); +} +int hg_scanner_402::set_dpi_color_check_val(void) +{ + setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO; + if (resolution_ <= 200) + retio = setting3399::SR_SET_H_200_RATIO; + else if (resolution_ > 200 && resolution_ <= 300) + retio = setting3399::SR_SET_H_300_RATIO; + else if (resolution_ > 300 && resolution_ <= 600) + retio = setting3399::SR_SET_H_600_RATIO; + + return write_register(retio, *(int*)&save_dpi_color_check_val); +} int hg_scanner_402::set_notify_sleep() { int val = 0, diff --git a/hgdriver/hgdev/hg_scanner_402.h b/hgdriver/hgdev/hg_scanner_402.h index 73b40be..28a5a73 100644 --- a/hgdriver/hgdev/hg_scanner_402.h +++ b/hgdriver/hgdev/hg_scanner_402.h @@ -53,24 +53,27 @@ class hg_scanner_402 : public hg_scanner int read_one_image_from_usb(SANE_Image_Statu statu = SANE_Image_Statu_OK); void discard_all_images(void); - protected: - int on_color_mode_changed(int& color_mode) override; - virtual int on_paper_changed(int& paper) override; - virtual int on_paper_check_changed(bool& check) override; - virtual int on_resolution_changed(int& dpi) override; - - virtual int on_ultrasonic_check_changed(bool& check) override; - virtual int on_staple_check_changed(bool& check) override; - virtual int on_skew_check_changed(bool& check) override; - virtual int on_skew_check_level_changed(int& check) override; - - virtual int on_get_feedmode(int &feedmode);//鑾峰彇鍒嗙焊寮哄害 - virtual int on_set_feedmode(int feedmode);//璁剧疆鍒嗙焊寮哄害 - virtual void on_device_reconnected(void) override; - virtual int on_scanner_closing(bool force) override; + virtual int on_scanner_closing(bool force) override; virtual void thread_handle_usb_read(void) override; +protected: + virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲 + virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆 + virtual int on_paper_check_changed(bool& check) override; //灏哄妫娴 + virtual int on_resolution_changed(int& dpi) override; //鍒嗚鲸鐜囪缃 + virtual int on_ultrasonic_check_changed(bool& check) override; //璁剧疆瓒呭0娉㈡娴 + virtual int on_staple_check_changed(bool& check) override; //璁剧疆璁功閽堟娴 + virtual int on_skew_check_changed(bool& check) override; //璁剧疆姝枩妫娴 + virtual int on_skew_check_level_changed(int& check) override; //璁剧疆姝枩妫娴嬪己搴 + virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害 + virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害 + virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬呮枃鏈ā寮 + virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害 + virtual int on_pick_paper_threshold(double threshold)override; + virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿 + virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇 + public: hg_scanner_402(const char* dev_name, int pid,usb_io* io); @@ -106,7 +109,7 @@ public: virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ - virtual int set_devreboot() override; //璁剧疆璁惧閲嶅惎 + virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙i攣锛1閿佸畾*/ @@ -115,4 +118,6 @@ public: virtual int set_clean_paper_road() override; //娓呯悊绾搁亾 virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆-1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ 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锛80 + virtual int set_dpi_color_check_val(void) override; //璁剧疆鐣稿彉鐭 }; diff --git a/hgdriver/hgdev/image_process.cpp b/hgdriver/hgdev/image_process.cpp index e01d70d..eeb5364 100644 --- a/hgdriver/hgdev/image_process.cpp +++ b/hgdriver/hgdev/image_process.cpp @@ -1,6 +1,5 @@ #include "image_process.h" #include "../wrapper/hg_log.h" - #include #include #if !defined(WIN32) && !defined(_WIN64) @@ -43,7 +42,7 @@ typedef struct BITMAPINFOHEADER #endif #include #include "ImageMatQueue.h" -#include "../ImageProcess/ImageApplyHeaders.h" + #include "ImageMultiOutput.h" #include "PaperSize.h" #include "imgproc/HGOCR.h" @@ -522,12 +521,17 @@ namespace hg_imgproc } cv::Mat mat(cv::imdecode(*buf, rmc)); //cv::imwrite("1.jpg",mat); + if (mat.empty()) { LOG_INFO(LOG_LEVEL_FATAL, "decode image data error\n"); continue; } - if (pid == 0x100 || pid == 0x200 || pid == 0x139 || pid == 0x239 || pid_ == 0x439) + if (param_.cis_image) + { + mats_.push_back(mat); + } + else if (pid == 0x100 || pid == 0x200 || pid == 0x139 || pid == 0x239 || pid_ == 0x439) { mats_.push_back(mat); //cv::imwrite(std::to_string(i)+"_decode.jpg",mat); @@ -1295,7 +1299,21 @@ namespace hg_imgproc return SCANNER_ERR_OK; } + int cis_test_image(CISTestImageProcess::CISTestResult &res) + { + int ret = SCANNER_ERR_OK; + std::vector mats(mats_); + mats_.clear(); + for (size_t i = 0; i < mats.size(); ++i) + { + CISTestImageProcess::CISTestResult r; + CISTestImageProcess::test(mats[i], r); + mats_.push_back(mats[i]); + cv::imwrite("1.jpg",mats[i]); + } + return ret; + } HGImage opencv_to_hgbase_image(const cv::Mat& mats) { HGImage image; @@ -1621,6 +1639,10 @@ namespace hg_imgproc { return ((imgproc*)himg)->size_detection(); } + int cis_test_image(HIMGPRC himg, CISTestImageProcess::CISTestResult &res) + { + return ((imgproc*)himg)->cis_test_image(res); + } int final(HIMGPRC himg) { return ((imgproc*)himg)->final(); diff --git a/hgdriver/hgdev/image_process.h b/hgdriver/hgdev/image_process.h index f82677a..6a0d3c7 100644 --- a/hgdriver/hgdev/image_process.h +++ b/hgdriver/hgdev/image_process.h @@ -9,7 +9,7 @@ #include #include #include - +#include "../ImageProcess/ImageApplyHeaders.h" class tiny_buffer; namespace hg_imgproc { @@ -148,6 +148,7 @@ namespace hg_imgproc int color_mode; bool double_side; bool black_white; + bool cis_image; //璁剧疆鍘熷浘 }IMGPRCPARAM, *LPIMGPRCPARAM; typedef struct _img_header { @@ -198,7 +199,7 @@ namespace hg_imgproc int ocr_auto_txtdirect(HIMGPRC himg); int tesseract_auto_txtdirect(HIMGPRC himg); int size_detection(HIMGPRC himg); - + int cis_test_image(HIMGPRC himg, CISTestImageProcess::CISTestResult& res); int final(HIMGPRC himg); // pimh must not to be NULL, and pimh->total_bytes indicates the length of 'buf'