Merge branch 'master' of http://192.168.10.5:8099/sane/code_device
This commit is contained in:
commit
bffdcc4728
|
@ -2930,7 +2930,11 @@ int hg_scanner::set_setting(const char* name, void* data, int len)
|
|||
// setting_jsn_.at(real_n).at("title").get_to(name);
|
||||
if (type == "string")
|
||||
{
|
||||
setting_jsn_.at(real_n).at("cur") = (char*)data;
|
||||
int id = lang_get_string_id((char*)data, false);
|
||||
if (id == -1)
|
||||
setting_jsn_.at(real_n).at("cur") = (char*)data;
|
||||
else
|
||||
setting_jsn_.at(real_n).at("cur") = id;
|
||||
type = (char*)data;
|
||||
}
|
||||
else if (type == "int")
|
||||
|
@ -3046,6 +3050,49 @@ bool hg_scanner::is_online(void)
|
|||
{
|
||||
return online_;
|
||||
}
|
||||
void hg_scanner::on_language_changed(void)
|
||||
{
|
||||
// change the 'size' member of string settings ...
|
||||
for (size_t i = 1; i < jsn_children_.size(); ++i)
|
||||
{
|
||||
std::string v(jsn_children_[i]);
|
||||
|
||||
if (!setting_jsn_.contains(v.c_str()))
|
||||
continue;
|
||||
|
||||
std::string val("");
|
||||
|
||||
setting_jsn_.at(v.c_str()).at("type").get_to(val);
|
||||
if (val != "string")
|
||||
continue;
|
||||
|
||||
if (setting_jsn_.at(v.c_str()).contains("range"))
|
||||
{
|
||||
int old = 0, now = 0;
|
||||
setting_jsn_.at(v.c_str()).at("size").get_to(old);
|
||||
for (int i = 0; i < setting_jsn_.at(v.c_str()).at("range").size(); ++i)
|
||||
{
|
||||
int id = -1;
|
||||
|
||||
if (setting_jsn_.at(v.c_str()).at("range").at(i).is_number())
|
||||
{
|
||||
setting_jsn_.at(v.c_str()).at("range").at(i).get_to(id);
|
||||
val = hg_log::lang_load(id);
|
||||
}
|
||||
else
|
||||
setting_jsn_.at(v.c_str()).at("range").at(i).get_to(val);
|
||||
if (now < val.length())
|
||||
now = val.length();
|
||||
}
|
||||
now += 8;
|
||||
if (now > old)
|
||||
{
|
||||
setting_jsn_.at(v.c_str()).at("size") = now;
|
||||
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "Change size of '%s' from %d to %d\n", v.c_str(), old, now);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
int hg_scanner::start(void)
|
||||
{
|
||||
user_cancel_ = false;
|
||||
|
|
|
@ -426,6 +426,8 @@ public:
|
|||
std::string name(void);
|
||||
int status(void);
|
||||
bool is_online(void);
|
||||
void on_language_changed(void);
|
||||
|
||||
public:
|
||||
virtual int start(void);
|
||||
virtual int get_image_info(SANE_Parameters* ii);
|
||||
|
|
|
@ -778,3 +778,13 @@ scanner_err hg_scanner_mgr::hg_scanner_control(scanner_handle h, unsigned long c
|
|||
else
|
||||
return (scanner_err)SCAN_PTR(h)->device_io_control(code, data, len);
|
||||
}
|
||||
|
||||
void hg_scanner_mgr::on_language_changed(void)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_dev_);
|
||||
for (auto& v: online_devices_)
|
||||
{
|
||||
if (v.scanner)
|
||||
v.scanner->on_language_changed();
|
||||
}
|
||||
}
|
|
@ -127,5 +127,7 @@ public:
|
|||
scanner_err hg_scanner_get_status(scanner_handle h, int setstutas);
|
||||
scanner_err hg_scanner_reset(scanner_handle h);
|
||||
scanner_err hg_scanner_control(scanner_handle h, unsigned long code, void* data, unsigned* len);
|
||||
|
||||
void on_language_changed(void);
|
||||
};
|
||||
|
||||
|
|
|
@ -69,6 +69,12 @@ namespace err_map
|
|||
}
|
||||
extern "C"
|
||||
{
|
||||
static void language_changed(int cp, void* param)
|
||||
{
|
||||
reload_setting_string_from_pak(cp, nullptr);
|
||||
hg_scanner_mgr::instance()->on_language_changed();
|
||||
}
|
||||
|
||||
scanner_err hg_scanner_initialize(sane_callback callback, void* reserve)
|
||||
{
|
||||
std::string name(""),
|
||||
|
@ -98,7 +104,7 @@ extern "C"
|
|||
VLOG_MINI_1(LOG_LEVEL_FATAL, "No language package found(%d)!\n", -1);
|
||||
return SCANNER_ERR_LANG_PAK_LOST;
|
||||
}
|
||||
register_language_changed_notify(reload_setting_string_from_pak, true);
|
||||
register_language_changed_notify(language_changed, true);
|
||||
|
||||
hg_scanner_mgr::set_version(VERSION_MAJOR, VERSION_MINOR, VERSION_YEAR, GET_BUILD_VER);
|
||||
hg_scanner_mgr::set_exe_name(pe.c_str(), name.c_str());
|
||||
|
@ -108,7 +114,7 @@ extern "C"
|
|||
}
|
||||
void hg_scanner_uninitialize(void)
|
||||
{
|
||||
register_language_changed_notify(reload_setting_string_from_pak, false);
|
||||
register_language_changed_notify(language_changed, false);
|
||||
hg_scanner_mgr::clear();
|
||||
hg_log::unint();
|
||||
}
|
||||
|
|
|
@ -381,6 +381,8 @@ hg_sane_middleware::~hg_sane_middleware()
|
|||
|
||||
void hg_sane_middleware::language_changed(int cp, void* param)
|
||||
{
|
||||
for (auto& v : hg_sane_middleware::instance()->openning_)
|
||||
hg_sane_middleware::free_device_inst(v, false);
|
||||
|
||||
}
|
||||
const SANE_Device** hg_sane_middleware::to_sane_device(ScannerInfo* hgscanner, int count)
|
||||
|
@ -1016,7 +1018,7 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
|
|||
if (depend)
|
||||
{
|
||||
std::vector<LPDEVINST>::iterator it = find_openning_device_in_que(h);
|
||||
if (it != openning_.end() && parse_depends(depend, so, (*it)->masters))
|
||||
if (it != openning_.end() && parse_depends(h, depend, so, (*it)->masters))
|
||||
{
|
||||
so.enable_now = (ret->cap & SANE_CAP_INACTIVE) != SANE_CAP_INACTIVE;
|
||||
so.name = name;
|
||||
|
@ -1049,14 +1051,22 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
|
|||
|
||||
return ret;
|
||||
}
|
||||
void hg_sane_middleware::free_device_inst(LPDEVINST dev)
|
||||
void hg_sane_middleware::free_device_inst(LPDEVINST dev, bool del)
|
||||
{
|
||||
if (dev->std_opt)
|
||||
delete dev->std_opt;
|
||||
for (auto& v : dev->opts)
|
||||
local_utility::free_memory(v.desc);
|
||||
|
||||
delete dev;
|
||||
if(del)
|
||||
delete dev;
|
||||
else
|
||||
{
|
||||
dev->opts.clear();
|
||||
dev->cur_vals.clear();
|
||||
dev->slaves.clear();
|
||||
dev->masters.clear();
|
||||
}
|
||||
}
|
||||
scanner_handle hg_sane_middleware::find_openning_device(SANE_Handle h, bool rmv, LPDEVINST* dev)
|
||||
{
|
||||
|
@ -1233,7 +1243,7 @@ bool hg_sane_middleware::get_current_value(scanner_handle handle, const void* op
|
|||
std::vector<LPDEVINST>::iterator it = find_openning_device_in_que(handle);
|
||||
refresh_current_value(*it, name.c_str(), jsn);
|
||||
|
||||
jsn->get_value("title", val);
|
||||
val = hg_sane_middleware::get_string_in_json(jsn, "title");
|
||||
|
||||
if (setv == &hg_sane_middleware::set_value_to_new)
|
||||
value = *(void**)value;
|
||||
|
@ -1253,8 +1263,7 @@ void* hg_sane_middleware::get_default_value(scanner_handle handle, const void* o
|
|||
if (jsn->attach_text(&val[0]) &&
|
||||
jsn->get_value("type", val))
|
||||
{
|
||||
std::string title("");
|
||||
jsn->get_value("title", title);
|
||||
std::string title(hg_sane_middleware::get_string_in_json(jsn, "title"));
|
||||
if (val == "bool")
|
||||
{
|
||||
bool v = false;
|
||||
|
@ -1896,7 +1905,7 @@ bool hg_sane_middleware::parse_master_option(const char* depend_str, MASTEROP& m
|
|||
|
||||
return ret;
|
||||
}
|
||||
bool hg_sane_middleware::parse_depends(json* jsn, SLAVEOP& so, std::vector<std::string>& master)
|
||||
bool hg_sane_middleware::parse_depends(scanner_handle h, json* jsn, SLAVEOP& so, std::vector<std::string>& master)
|
||||
{
|
||||
std::string val(""), mn("");
|
||||
bool ret = jsn->first_child(val);
|
||||
|
@ -1913,6 +1922,10 @@ bool hg_sane_middleware::parse_depends(json* jsn, SLAVEOP& so, std::vector<std::
|
|||
mo.name = mn;
|
||||
else
|
||||
mn = mo.name;
|
||||
|
||||
SANE_Option_Descriptor* m = find_stored_descriptor(h, mo.name.c_str());
|
||||
if (m && m->type == SANE_TYPE_STRING)
|
||||
mo.limit_l = from_default_language(mo.limit_l.c_str(), nullptr);
|
||||
so.master.push_back(mo);
|
||||
if (std::find(master.begin(), master.end(), mo.name) == master.end())
|
||||
{
|
||||
|
|
|
@ -171,7 +171,7 @@ class hg_sane_middleware
|
|||
|
||||
|
||||
bool parse_master_option(const char* depend_str, MASTEROP& mo);
|
||||
bool parse_depends(json* jsn, SLAVEOP& so, std::vector<std::string>& master);
|
||||
bool parse_depends(scanner_handle h, json* jsn, SLAVEOP& so, std::vector<std::string>& master);
|
||||
|
||||
bool is_associatived(const SLAVEOP& slave, const char* master_name);
|
||||
bool set_stored_option_enabled(scanner_handle h, const void* option, bool enable, int* size = NULL);
|
||||
|
@ -185,7 +185,7 @@ class hg_sane_middleware
|
|||
std::vector<LPDEVINST>::iterator find_openning_device_in_que(const char* name);
|
||||
/// 关联项处理结束
|
||||
|
||||
static void free_device_inst(LPDEVINST dev);
|
||||
static void free_device_inst(LPDEVINST dev, bool del = true);
|
||||
scanner_handle find_openning_device(SANE_Handle h, bool rmv = false, LPDEVINST* dev = NULL);
|
||||
|
||||
protected:
|
||||
|
|
Loading…
Reference in New Issue