This commit is contained in:
13038267101 2022-06-27 17:12:07 +08:00
commit 22ea3d45ed
4 changed files with 43 additions and 26 deletions

View File

@ -1870,6 +1870,8 @@ int hg_scanner::save_usb_data(std::shared_ptr<tiny_buffer> data)
if (wait_img_.is_waiting())
wait_img_.notify();
}
unsigned int bytes = data->size();
ui_ev_cb_((scanner_handle)this, SANE_EVENT_USB_DATA_RECEIVED, NULL, &bytes, NULL);
return ret;
}
@ -2333,7 +2335,10 @@ int hg_scanner::read_image_data(unsigned char* buf, int* len)
return over ? SCANNER_ERR_NO_DATA : SCANNER_ERR_OK;
}
else
{
*len = 0;
return SCANNER_ERR_NO_DATA;
}
}
int hg_scanner::stop(void)
{
@ -2441,13 +2446,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
return SCANNER_ERR_INSUFFICIENT_MEMORY;
}
char* buf = strcpy((char*)data, fw.c_str());
if (data)
strcpy((char*)data, fw.c_str());
if (buf)
{
return SCANNER_ERR_OK;
}
return SCANNER_ERR_DATA_DAMAGED;
return SCANNER_ERR_OK;
}
else if(code == IO_CTRL_CODE_GET_SERIAL)
{
@ -2457,12 +2459,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
*len = ser.size();
return SCANNER_ERR_INSUFFICIENT_MEMORY;
}
char* buf = strcpy((char*)data, ser.c_str());
if (buf)
{
return SCANNER_ERR_OK;
}
return SCANNER_ERR_DATA_DAMAGED;
if (data)
strcpy((char*)data, ser.c_str());
return SCANNER_ERR_OK;
}
else if (code == IO_CTRL_CODE_GET_HARDWARE_VERSION)
{
@ -2472,13 +2472,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
*len = ip.size();
return SCANNER_ERR_INSUFFICIENT_MEMORY;
}
char* buf = strcpy((char*)data, ip.c_str());
if (data)
strcpy((char*)data, ip.c_str());
if (buf)
{
return SCANNER_ERR_OK;
}
return SCANNER_ERR_DATA_DAMAGED;
return SCANNER_ERR_OK;
}
else if (code == IO_CTRL_CODE_GET_PAPER_ON)
{
@ -2566,6 +2563,14 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
return wait_img_.is_waiting() && wait_usb_.is_waiting() ? SCANNER_ERR_NO_DATA : SCANNER_ERR_OK;
}
else if (code == IO_CTRL_CODE_GET_PAPER_SIZE)
{
std::string name((char*)data);
int paper = match_best_paper(name, NULL);
SIZE size = paper_size(paper);
*len = (size.cx & 0x0ffff) | ((size.cy & 0x0ffff) << 16);
}
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}

View File

@ -31,13 +31,12 @@ g_supporting_devices[] = {
, {0x31c9, 0x8629, SCANNER_NAME_LSC_G62S, "G6290U", ""}
, {0x31c9, 0x8730, SCANNER_NAME_LSC_G73S, "G73x0U", ""}
, {0x31c9, 0x8739, SCANNER_NAME_LSC_G73S, "G73x0U", ""},
#endif
#ifdef OEM_HANWANG
#elif defined(OEM_HANWANG)
{0x2903, 0x7000, SCANNER_NAME_HW_7000, "HW-74x0WA", ""}
, {0x2903, 0x1000, SCANNER_NAME_HW_1060A, "HW-1060A", ""}
, {0x2903, 0x8000, SCANNER_NAME_HW_8090F, "HW-8090F", ""}
, {0x2903, 0x9000, SCANNER_NAME_HW_9110F, "HW-9110F", ""},
#endif
#else
{0x3072, 0x100, SCANNER_NAME_HG_G100, "GScanO200", ""}
, {0x3072, 0x200, SCANNER_NAME_HG_G200, "GScanO200", ""}
, {0x3072, 0x300, SCANNER_NAME_HG_G300, "GScanO400", ""}
@ -47,6 +46,7 @@ g_supporting_devices[] = {
, {0x3072, 0x339, SCANNER_NAME_HG_G339, "GScanO1003399", ""}
, {0x3072, 0x439, SCANNER_NAME_HG_G439, "GScanO1003399", ""}
, {0x064B, 0x7823, SCANNER_NAME_HG_G200, "GScanO200", ""}
#endif
};
static std::string g_vendor = COMPANY_NAME;

View File

@ -308,6 +308,12 @@ namespace local_utility
if (version_code)
*version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, VERSION_BUILD); // leading-char '1' is used for avoid compiler considering '0118' as an octal number :)
}
void set_callback(sane_callback cb, void* param)
{
std::lock_guard<std::mutex> lck(cb_lock_);
cb_ui_ = cb;
cb_ui_parm_ = param;
}
void stop_work(void)
{
std::lock_guard<std::mutex> lck(cb_lock_);
@ -469,6 +475,10 @@ hg_sane_middleware* hg_sane_middleware::instance(void)
return hg_sane_middleware::inst_;
}
void hg_sane_middleware::set_callback(sane_callback cb, void* param)
{
local_utility::set_callback(cb, param);
}
void hg_sane_middleware::clear(void)
{
local_utility::stop_work();
@ -1097,7 +1107,7 @@ bool hg_sane_middleware::get_current_value(scanner_handle handle, int option, vo
jsn->get_value("title", val);
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "<--Get option(%d - %s) value: %s\n", option, val.c_str(), hg_sane_middleware::option_value_2_string(t, value).c_str());
VLOG_MINI_3(LOG_LEVEL_ALL, "<--Get option(%d - %s) value: %s\n", option, val.c_str(), hg_sane_middleware::option_value_2_string(t, value).c_str());
}
delete jsn;
@ -1458,11 +1468,11 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, SANE_Int option, SANE_
if (prev == v)
{
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "-->Set option(%d - %s) value: %s\n", option, desc->title, v.c_str());
VLOG_MINI_3(LOG_LEVEL_ALL, "-->Set option(%d - %s) value: %s\n", option, desc->title, v.c_str());
}
else
{
VLOG_4(LOG_LEVEL_DEBUG_INFO, 512, "-->Set option(%d - %s) value: %s(Applied: %s)\n", option, desc->title, prev.c_str(), v.c_str());
VLOG_4(LOG_LEVEL_ALL, 512, "-->Set option(%d - %s) value: %s(Applied: %s)\n", option, desc->title, prev.c_str(), v.c_str());
}
if (err == SCANNER_ERR_OK)
@ -1996,8 +2006,7 @@ extern "C" { // avoid compiler exporting name in C++ style !!!
SANE_Status inner_sane_init_ex(SANE_Int* version_code, sane_callback cb, void* param)
{
local_utility::cb_ui_ = cb;
local_utility::cb_ui_parm_ = param;
local_utility::set_callback(cb, param);
hg_sane_middleware::instance();
local_utility::get_version(version_code);
@ -2015,10 +2024,12 @@ extern "C" { // avoid compiler exporting name in C++ style !!!
#ifdef WIN32
HMODULE g_my_inst = NULL;
BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
g_my_inst = inst;
if (g_sane_path.empty())
{
char path[MAX_PATH] = { 0 };

View File

@ -162,6 +162,7 @@ protected:
public:
static std::string sane_path(void);
static hg_sane_middleware* instance(void);
static void set_callback(sane_callback cb, void* param);
static void clear(void);
static scanner_handle sane_handle_to_scanner(SANE_Handle h);
static SANE_Handle scanner_handle_to_sane(scanner_handle h);