修复获取操作带参数的问题

This commit is contained in:
gb 2023-05-17 09:42:46 +08:00
parent 7998c2a827
commit d61d408ff5
1 changed files with 40 additions and 30 deletions

View File

@ -357,35 +357,42 @@ namespace local_utility
//TRY_MATCH(DRIVER_LOG); //TRY_MATCH(DRIVER_LOG);
//TRY_MATCH(DEVICE_LOG); //TRY_MATCH(DEVICE_LOG);
} }
static std::string un_json_option_name(int id) static std::string un_json_option_name(int id, int *len)
{ {
#define FIX_ID_TO_NAME(fid) \ int tmp = sizeof(int);
if(id == SANE_OPT_ID_##fid) \ if (!len)
return SANE_STD_OPT_NAME_##fid; len = &tmp;
FIX_ID_TO_NAME(HISTORY_COUNT); #define FIX_ID_TO_NAME(fid, l) \
FIX_ID_TO_NAME(DRIVER_VERSION); if(id == SANE_OPT_ID_##fid) \
FIX_ID_TO_NAME(MANUFACTURER); { \
FIX_ID_TO_NAME(COPYRIGHT); *len = l; \
FIX_ID_TO_NAME(CO_URL); return SANE_STD_OPT_NAME_##fid; \
FIX_ID_TO_NAME(CO_TEL); }
FIX_ID_TO_NAME(CO_ADDR);
FIX_ID_TO_NAME(CO_GPS);
FIX_ID_TO_NAME(VID);
FIX_ID_TO_NAME(PID);
FIX_ID_TO_NAME(DEV_NAME);
FIX_ID_TO_NAME(DEV_FAMILY);
FIX_ID_TO_NAME(ROLLER_COUNT);
FIX_ID_TO_NAME(HELP);
FIX_ID_TO_NAME(LOGIN);
FIX_ID_TO_NAME(LOGOUT);
FIX_ID_TO_NAME(DRIVER_LOG);
FIX_ID_TO_NAME(DEVICE_LOG);
FIX_ID_TO_NAME(DEVICE_SERIAL_NO); FIX_ID_TO_NAME(HISTORY_COUNT, sizeof(int));
FIX_ID_TO_NAME(FIRMWARE_VERSION); FIX_ID_TO_NAME(DRIVER_VERSION, 255);
FIX_ID_TO_NAME(DEVICE_IP_ADDR); FIX_ID_TO_NAME(MANUFACTURER, 255);
FIX_ID_TO_NAME(DEVICE_MAC_ADDR); FIX_ID_TO_NAME(COPYRIGHT, 255);
FIX_ID_TO_NAME(CO_URL, 255);
FIX_ID_TO_NAME(CO_TEL, 255);
FIX_ID_TO_NAME(CO_ADDR, 255);
FIX_ID_TO_NAME(CO_GPS, 255);
FIX_ID_TO_NAME(VID, sizeof(int));
FIX_ID_TO_NAME(PID, sizeof(int));
FIX_ID_TO_NAME(DEV_NAME, 255);
FIX_ID_TO_NAME(DEV_FAMILY, 255);
FIX_ID_TO_NAME(ROLLER_COUNT, sizeof(int));
FIX_ID_TO_NAME(HELP, sizeof(int));
FIX_ID_TO_NAME(LOGIN, 255);
FIX_ID_TO_NAME(LOGOUT, 255);
FIX_ID_TO_NAME(DRIVER_LOG, 255);
FIX_ID_TO_NAME(DEVICE_LOG, 255);
FIX_ID_TO_NAME(DEVICE_SERIAL_NO, 255);
FIX_ID_TO_NAME(FIRMWARE_VERSION, 255);
FIX_ID_TO_NAME(DEVICE_IP_ADDR, 255);
FIX_ID_TO_NAME(DEVICE_MAC_ADDR, 255);
return ""; return "";
} }
@ -1344,13 +1351,15 @@ bool hg_sane_middleware::get_current_value(scanner_handle handle, const void* op
{ {
if (IS_PTR_NUMBER(option)) if (IS_PTR_NUMBER(option))
{ {
int id = (int)(uint64_t)option; int id = (int)(uint64_t)option,
std::string name(local_utility::un_json_option_name(id)); l = 0;
std::string name(local_utility::un_json_option_name(id, &l));
if(!name.empty()) if(!name.empty())
{ {
char buf[256] = { 0 }; char buf[256] = { 0 };
long len = sizeof(buf) - 1; long len = sizeof(buf) - 1;
memcpy(buf, value, l);
if (hg_scanner_get_parameter(handle, name.c_str(), buf, &len) == SCANNER_ERR_OK) if (hg_scanner_get_parameter(handle, name.c_str(), buf, &len) == SCANNER_ERR_OK)
{ {
setv(buf, len, value); setv(buf, len, value);
@ -1769,8 +1778,9 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, const void* option, SA
{ {
if (IS_PTR_NUMBER(option)) if (IS_PTR_NUMBER(option))
{ {
int id = (int)(uint64_t)option; int id = (int)(uint64_t)option,
std::string name(local_utility::un_json_option_name(id)); l = 0;
std::string name(local_utility::un_json_option_name(id, &l));
if (!name.empty()) if (!name.empty())
return local_utility::scanner_err_2_sane_statu(hg_scanner_set_parameter(handle, name.c_str(), value, 0)); return local_utility::scanner_err_2_sane_statu(hg_scanner_set_parameter(handle, name.c_str(), value, 0));
} }