新增配置开启cpu高级指令集 新增配置设置内存检测

This commit is contained in:
13038267101 2022-11-24 16:57:31 +08:00
parent ca7cc065cf
commit 2575551b37
9 changed files with 120 additions and 65 deletions

View File

@ -19,6 +19,7 @@ add_definitions(-Dx86_64="x86_64")
message("cpu is x86_64") message("cpu is x86_64")
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64") elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
add_definitions(-Dxaarch64="aarch64")
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libittnotify.a ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libittnotify.a
${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libtegra_hal.a #uos kylin ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libtegra_hal.a #uos kylin
@ -28,12 +29,14 @@ elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
) )
message("cpu is arm64") message("cpu is arm64")
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64") elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64")
add_definitions(-Dmips64="mips64")
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
#message("静态库预留03") #message("静态库预留03")
#message("静态库预留04") #message("静态库预留04")
) )
message("cpu is mips64") message("cpu is mips64")
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "loongarch64") elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "loongarch64")
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
#message("静态库预留03") #message("静态库预留03")
#message("静态库预留04") #message("静态库预留04")

View File

@ -99,20 +99,35 @@ hg_scanner::hg_scanner(ScannerSerial serial
, async_io_(false), is_white_0_(true), isremove_left_hole(false), isremove_right_hole(false), isremove_top_hole(false), isremove_low_hole(false) , async_io_(false), is_white_0_(true), isremove_left_hole(false), isremove_right_hole(false), isremove_top_hole(false), isremove_low_hole(false)
, isremove_left_hole_threshold(0), isremove_right_hole_threshold(0), isremove_top_hole_threshold(0), isremove_low_hole_threshold(0) , 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) , 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) , is_kernelsnap_221027_(false), memory_size_(1024), isx86_closeAdvan_(true)
{ {
init_setting_func_map(); #if !defined(_WIN32) && !defined(_WIN64) &&defined(X86)
final_path_ = hg_log::ini_get("paths", "final_img"); isx86_closeAdvan_ = fasle;
if(final_path_.empty()) #endif
final_path_ = hg_log::local_data_path() + PATH_SEPARATOR + "imgs"; init_setting_func_map();
if (hg_log::ini_get("dump", "dumpusb") == "1") final_path_ = hg_log::ini_get("path", "final_img");
{ if(final_path_.empty())
dump_usb_path_ = hg_log::ini_get("dump", "usb_path"); final_path_ = hg_log::local_data_path() + PATH_SEPARATOR + "imgs";
if (dump_usb_path_.empty()) if (hg_log::ini_get("dump", "dumpusb") == "1")
dump_usb_path_ = final_path_; {
if (!dump_usb_path_.empty()) dump_usb_path_ = hg_log::ini_get("dump", "usb_path");
dump_img_ = &hg_scanner::dump_image_real; if (dump_usb_path_.empty())
} dump_usb_path_ = final_path_;
if (!dump_usb_path_.empty())
dump_img_ = &hg_scanner::dump_image_real;
}
std::string mem = dump_usb_path_ = hg_log::ini_get("mem", "max_img");
if (!mem.empty())
{
memory_size_ = std::stoi(mem);
}
std::string adv = dump_usb_path_ = hg_log::ini_get("cpu", "advanced");
if (!adv.empty())
{
isx86_closeAdvan_ = adv == "0" ? false : true;
}
if (hg_log::create_folder(final_path_.c_str())) if (hg_log::create_folder(final_path_.c_str()))
{ {
VLOG_MINI_1(LOG_LEVEL_WARNING, "temporary image folder: %s\n", final_path_.c_str()); VLOG_MINI_1(LOG_LEVEL_WARNING, "temporary image folder: %s\n", final_path_.c_str());
@ -148,7 +163,7 @@ hg_scanner::hg_scanner(ScannerSerial serial
wait_usb_result_.set_debug_info("start"); wait_usb_result_.set_debug_info("start");
thread_usb_read_.reset(new std::thread(&hg_scanner::thread_handle_usb, this)); thread_usb_read_.reset(new std::thread(&hg_scanner::thread_handle_usb, this));
thread_img_handle_.reset(new std::thread(&hg_scanner::thread_image_handle, this)); thread_img_handle_.reset(new std::thread(&hg_scanner::thread_image_handle, this));
ImagePrc_pHandle_ = hg_imgproc::init(pid_);; ImagePrc_pHandle_ = hg_imgproc::init(pid_, isx86_closeAdvan_);;
} }
hg_scanner::~hg_scanner() hg_scanner::~hg_scanner()
{ {
@ -2081,8 +2096,8 @@ hg_imgproc::IMGPRCPARAM hg_scanner::get_image_process_object(int model)
//image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE //image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE
param.black_white = image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE; param.black_white = image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE;
param.channels = image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS ? 3 : 1; param.channels = (image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS || image_prc_param_.bits.color_mode == COLOR_MODE_AUTO_MATCH) ? 3 : 1;
param.color_mode = image_prc_param_.bits.color_mode; 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.double_side = img_conf_.is_duplex;
param.dpi = img_conf_.resolution_dst; param.dpi = img_conf_.resolution_dst;
@ -2336,6 +2351,7 @@ void hg_scanner::copy_to_sane_image_header(SANE_Parameters* header, int w, int h
int hg_scanner::save_usb_data(std::shared_ptr<tiny_buffer> data) int hg_scanner::save_usb_data(std::shared_ptr<tiny_buffer> data)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
float Memoryusae = hg_log::GetAppMemoryUsage();;
unsigned int bytes = data->size(); unsigned int bytes = data->size();
usb_img_index_++; usb_img_index_++;
@ -2368,6 +2384,11 @@ int hg_scanner::save_usb_data(std::shared_ptr<tiny_buffer> data)
} }
else else
{ {
while (Memoryusae > memory_size_)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
Memoryusae = hg_log::GetAppMemoryUsage();
}
imgs_.Put(data); imgs_.Put(data);
if (wait_img_.is_waiting()) if (wait_img_.is_waiting())
wait_img_.notify(); wait_img_.notify();

View File

@ -291,6 +291,8 @@ protected:
unsigned int usb_img_index_; unsigned int usb_img_index_;
unsigned int final_img_index_; unsigned int final_img_index_;
std::string final_path_; std::string final_path_;
unsigned int memory_size_;
bool isx86_closeAdvan_;
BlockingQueue<std::shared_ptr<tiny_buffer>> imgs_; BlockingQueue<std::shared_ptr<tiny_buffer>> imgs_;
void init_settings(const char* json_setting_text); void init_settings(const char* json_setting_text);

View File

@ -232,22 +232,20 @@ std::string hg_scanner_239::get_fpga(void)
return fpga; return fpga;
} }
int hg_scanner_239::get_scan_mode(void) int hg_scanner_239::get_scan_mode(int &v)
{ {
int val = 0, int val = 0,
ret = read_register(setting3399::SR_OS, &val); ret = read_register(setting3399::SR_OS, &val);
v = val;
if (ret) if (val == 1)
{ {
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get scan mode error: %s\n", hg_scanner_err_name(ret)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get scan mode error: %s\n", hg_scanner_err_name(ret));
status_ = ret; return SCANNER_ERR_DEVICE_COUNT_MODE;
return -1;
} }
else return ret;
return val;
} }
int hg_scanner_239::get_status(void) int hg_scanner_239::get_status(void)
{ {
int val = 0, int val = 0,
ret = read_register(setting3399::SR_STATUS, &val); ret = read_register(setting3399::SR_STATUS, &val);
@ -262,7 +260,6 @@ int hg_scanner_239::get_status(void)
else else
return val; return val;
} }
bool hg_scanner_239::is_dev_image_process_done(void) bool hg_scanner_239::is_dev_image_process_done(void)
{ {
int val = 0, int val = 0,
@ -294,8 +291,7 @@ bool hg_scanner_239::is_dev_image_keep_last_paper(void)
else else
return val; return val;
} }
int hg_scanner_239::get_image_count(void)
int hg_scanner_239::get_image_count(void)
{ {
int val = 0, int val = 0,
ret = read_register(setting3399::SR_IM_COUNT, &val); ret = read_register(setting3399::SR_IM_COUNT, &val);
@ -307,7 +303,7 @@ int hg_scanner_239::get_image_count(void)
else else
return -1; return -1;
} }
int hg_scanner_239::get_front_data_size(void) int hg_scanner_239::get_front_data_size(void)
{ {
int val = 0, int val = 0,
ret = read_register(setting3399::SR_IM_FRONT_SIZE, &val); ret = read_register(setting3399::SR_IM_FRONT_SIZE, &val);
@ -342,8 +338,7 @@ void hg_scanner_239::init_version(void)
else else
is_kernelsnap_221027_ = false; is_kernelsnap_221027_ = false;
} }
int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware::HGSCANCONF_3399* dev_conf)
int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware::HGSCANCONF_3399* dev_conf)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if (!type) if (!type)
@ -378,8 +373,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware::
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Writedown scanner configuration(0x%x) = %s\n", dev_conf->value, hg_scanner_err_name(ret)); VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Writedown scanner configuration(0x%x) = %s\n", dev_conf->value, hg_scanner_err_name(ret));
return ret; return ret;
} }
int hg_scanner_239::writedown_image_configuration(void)
int hg_scanner_239::writedown_image_configuration(void)
{ {
int ret = write_register(setting3399::SR_CONFIF_IMGPROCPARAM, sizeof(SCANCONF)); int ret = write_register(setting3399::SR_CONFIF_IMGPROCPARAM, sizeof(SCANCONF));
if (ret != SCANNER_ERR_OK) if (ret != SCANNER_ERR_OK)
@ -706,8 +700,7 @@ int hg_scanner_239::writedown_image_configuration(void)
img_conf_ = ic;*/ img_conf_ = ic;*/
return ret; return ret;
} }
int hg_scanner_239::pop_first_image(void)
int hg_scanner_239::pop_first_image(void)
{ {
int ret = write_register(setting3399::SR_IM_POP, 1); int ret = write_register(setting3399::SR_IM_POP, 1);
@ -715,8 +708,7 @@ int hg_scanner_239::pop_first_image(void)
return ret; return ret;
} }
int hg_scanner_239::read_one_image_from_usb(SANE_Image_Statu statu)
int hg_scanner_239::read_one_image_from_usb(SANE_Image_Statu statu)
{ {
int r = 0, int r = 0,
total = get_front_data_size(), total = get_front_data_size(),
@ -843,7 +835,6 @@ void hg_scanner_239::discard_all_images(void)
if (pre_int) if (pre_int)
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img); VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img);
} }
//color_mode =-1 除色选项 //color_mode =-1 除色选项
int hg_scanner_239::on_color_mode_changed(int& color_mode) int hg_scanner_239::on_color_mode_changed(int& color_mode)
{ {
@ -921,7 +912,6 @@ int hg_scanner_239::on_resolution_changed(int& dpi)
int ret = writedown_device_configuration(); int ret = writedown_device_configuration();
return ret; return ret;
} }
int hg_scanner_239::on_ultrasonic_check_changed(bool& check) int hg_scanner_239::on_ultrasonic_check_changed(bool& check)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -1007,7 +997,6 @@ int hg_scanner_239::on_skew_check_level_changed(int& check)
return ret; return ret;
} }
int hg_scanner_239::on_get_feedmode(int &feedmode)//获取分纸强度 int hg_scanner_239::on_get_feedmode(int &feedmode)//获取分纸强度
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
@ -1093,7 +1082,6 @@ int hg_scanner_239::on_scanner_closing(bool force)
{ {
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
void hg_scanner_239::thread_handle_usb_read(void) void hg_scanner_239::thread_handle_usb_read(void)
{ {
char buf[64]; char buf[64];
@ -1323,9 +1311,10 @@ int hg_scanner_239::start(void)
notify_ui_working_status(STATU_DESC_PREPARE_START); notify_ui_working_status(STATU_DESC_PREPARE_START);
reset(); reset();
ret = get_roller_num(val); //ret = get_roller_num(val);
ret = get_scan_is_sleep(val);//211220固件版本不支持返回
if (ret == SCANNER_ERR_DEVICE_SLEEPING) //211220固件版本不支持返回
if ((ret = get_scan_is_sleep(val)) == SCANNER_ERR_DEVICE_SLEEPING)
{ {
status_ = ret;; status_ = ret;;
VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING); VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING);
@ -1334,26 +1323,22 @@ int hg_scanner_239::start(void)
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NOTIFY_SLEEP, SANE_EVENT_ERROR, status_); notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NOTIFY_SLEEP, SANE_EVENT_ERROR, status_);
return status_; return status_;
} }
else if ((ret = get_scan_mode(val)) == SCANNER_ERR_DEVICE_COUNT_MODE)
ret = get_scan_mode();
if (status_ == SCANNER_ERR_DEVICE_NOT_FOUND)
return status_;
if (ret == -1)
return status_;
if (ret & 1)
{ {
status_ = SCANNER_ERR_DEVICE_COUNT_MODE; status_ = ret;
return ret;
return status_; }
else if ((ret = get_scan_islock(val)) == SCANNER_ERR_DEVICE_ISLOCK)
{
status_ = ret;
return ret;
} }
notify_ui_working_status(STATU_DESC_REWRITE_CONFIGURATION); notify_ui_working_status(STATU_DESC_REWRITE_CONFIGURATION);
if(ret == SCANNER_ERR_OK) if(ret == SCANNER_ERR_OK)
{ {
ret = writedown_device_configuration(true); ret = writedown_device_configuration(true);
} }
if(ret == SCANNER_ERR_OK) if(ret == SCANNER_ERR_OK)
{ {
ret = writedown_image_configuration(); ret = writedown_image_configuration();
@ -1459,9 +1444,6 @@ int hg_scanner_239::clear_roller_num(void)
return ret; return ret;
} }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner_239::set_leaflet_scan(void) int hg_scanner_239::set_leaflet_scan(void)

View File

@ -30,7 +30,7 @@ class hg_scanner_239 : public hg_scanner
std::string control_fetch(int addr, int val, int size); std::string control_fetch(int addr, int val, int size);
std::string get_fpga(void); std::string get_fpga(void);
int get_scan_mode(void); int get_scan_mode(int &v);
int get_status(void); int get_status(void);
int get_image_count(void); int get_image_count(void);
int get_front_data_size(void); int get_front_data_size(void);

View File

@ -229,6 +229,7 @@ namespace hg_imgproc
typedef unsigned int (__stdcall *SDKHGBase_FreeImage_)(void* image); typedef unsigned int (__stdcall *SDKHGBase_FreeImage_)(void* image);
class imgproc class imgproc
{ {
bool isx86_closeAdvan_ = true;
std::string my_path_; std::string my_path_;
IMGPRCPARAM param_; IMGPRCPARAM param_;
SCANCONF img_conf_; SCANCONF img_conf_;
@ -275,15 +276,16 @@ namespace hg_imgproc
} }
// construction // construction
public: public:
imgproc(int pid) : pid_(pid),papersize_(pid_) imgproc(int pid, bool isx86_Advan_) : pid_(pid),papersize_(pid_)
, img_statu_(SANE_Image_Statu_OK) , img_statu_(SANE_Image_Statu_OK)
, my_path_(hg_log::pe_path()) , my_path_(hg_log::pe_path())
,ocrinit_(NULL),ocrgetdirectimage_(NULL) ,ocrinit_(NULL),ocrgetdirectimage_(NULL)
,ocrexit_(NULL),HGBase_CreatImg(NULL) ,ocrexit_(NULL),HGBase_CreatImg(NULL)
,HGBase_FreeImg(NULL),Auto_Txt_pHanld(NULL) ,HGBase_FreeImg(NULL),Auto_Txt_pHanld(NULL)
,Dynamicopen_HGBase_pHandle_(NULL) ,Dynamicopen_HGBase_pHandle_(NULL)
,Dynamicopen_HGImageprc_pHandle_(NULL) ,Dynamicopen_HGImageprc_pHandle_(NULL),isx86_closeAdvan_(isx86_Advan_)
{ {
cv::setUseOptimized(isx86_closeAdvan_); //开关cpu高级指令集
} }
~imgproc() ~imgproc()
{ {
@ -1556,9 +1558,9 @@ namespace hg_imgproc
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// api ... // api ...
HIMGPRC init(int pid) HIMGPRC init(int pid,bool isx86_Advan_)
{ {
imgproc* obj = new imgproc(pid); imgproc* obj = new imgproc(pid, isx86_Advan_);
return (HIMGPRC)obj; return (HIMGPRC)obj;
} }

View File

@ -161,7 +161,7 @@ namespace hg_imgproc
}IMGHEAD, *LPIMGHEAD; }IMGHEAD, *LPIMGHEAD;
HIMGPRC init(int pid); HIMGPRC init(int pid, bool isx86Advan_);
int load_buffer(HIMGPRC himg,std::shared_ptr<tiny_buffer> buff); int load_buffer(HIMGPRC himg,std::shared_ptr<tiny_buffer> buff);
int load_file(HIMGPRC himg, const char* path_file); int load_file(HIMGPRC himg, const char* path_file);

View File

@ -681,6 +681,48 @@ extern "C"
{ {
log_cls::instance()->log(info); log_cls::instance()->log(info);
} }
float GetMemoryUsage(int pid)
{
#ifdef WIN32
uint64_t mem = 0, vmem = 0;
PROCESS_MEMORY_COUNTERS pmc;
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (GetProcessMemoryInfo(process, &pmc, sizeof(pmc)))
{
mem = pmc.WorkingSetSize;
vmem = pmc.PagefileUsage;
}
CloseHandle(process);
return mem / 1024.0 / 1024.0;//KB TO MB
#else
char file_name[64] = { 0 };
FILE* fd;
char line_buff[512] = { 0 };
sprintf(file_name, "/proc/%d/status", pid);
fd = fopen(file_name, "r");
if (nullptr == fd)
return 0;
char name[64];
int vmrss = 0;
for (int i = 0; i < VMRSS_LINE - 1; i++)
fgets(line_buff, sizeof(line_buff), fd);
fgets(line_buff, sizeof(line_buff), fd);
sscanf(line_buff, "%s %d", name, &vmrss);
fclose(fd);
return vmrss / 1024.0;//KB TO MB
#endif
}
float GetAppMemoryUsage()
{
return GetMemoryUsage(getpid());
}
} }
#ifdef EXPORT_AS_C #ifdef EXPORT_AS_C
} }
@ -692,3 +734,4 @@ void hg_debug_log(int level, const char* info)
hg_log::log(level, info); hg_log::log(level, info);
} }
#endif #endif

View File

@ -55,6 +55,8 @@ extern "C"
std::string local_data_path(void); std::string local_data_path(void);
std::string temporary_path(void); std::string temporary_path(void);
std::string log_file_path(void); std::string log_file_path(void);
float GetMemoryUsage(int pid);
float GetAppMemoryUsage();
unsigned int get_page_size(unsigned int* map_unit = nullptr); unsigned int get_page_size(unsigned int* map_unit = nullptr);
unsigned long long available_memory(void); unsigned long long available_memory(void);
void str_tolower(std::string& str); void str_tolower(std::string& str);