在json中将gamma等浮点数保存为值类型,而不是字符串

This commit is contained in:
luoliangyi 2022-06-06 19:34:54 +08:00
parent be94164549
commit 67e6a1bab8
8 changed files with 145 additions and 61 deletions

View File

@ -222,6 +222,13 @@ namespace ver_1
m_devName.clear();
}
void ManagerV1::ScanFinish(const ScanFinishParam* param)
{
assert(NULL != param && this == param->mgr);
StopScan();
}
void ManagerV1::SetSaneEvent(SaneEvent event, void* param)
{
assert(NULL != event && NULL != param);
@ -2086,6 +2093,18 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_SCAN_FINISHED, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_SetEvent(p->m_scanEvent);
ScanFinishParam* scanFinishParam = new ScanFinishParam;
scanFinishParam->mgr = p;
HGMsg msg;
msg.id = MSGID_SCAN_FINISH;
msg.data = scanFinishParam;
if (HGBASE_ERR_OK != HGBase_PostPumpMessage(p->m_msgPump, &msg))
{
delete scanFinishParam;
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), p->m_saneParam);

View File

@ -100,6 +100,8 @@ namespace ver_1
void OpenDev(const OpenDevParam* param);
// 关闭设备
void CloseDev(const CloseDevParam* param);
// 扫描完成
void ScanFinish(const ScanFinishParam* param);
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);

View File

@ -91,6 +91,14 @@ namespace ver_2
}
}
void ManagerV2::ScanFinish(const ScanFinishParam* param)
{
assert(NULL != param && this == param->mgr);
std::string errInfo;
StopScan(errInfo);
}
void ManagerV2::SetSaneEvent(SaneEvent event, void* param)
{
assert(NULL != event && NULL != param);
@ -1322,38 +1330,38 @@ namespace ver_2
assert(!devName.empty());
devParam.Reset();
devParam.colorMode = StdStringToUtf8(GetCfgStringValue(devName.c_str(), "colorMode", "24位彩色"));
devParam.pageMode = StdStringToUtf8(GetCfgStringValue(devName.c_str(), "pageMode", "双面"));
devParam.resolution = GetCfgIntValue(devName.c_str(), "resolution", 200);
devParam.brightness = GetCfgIntValue(devName.c_str(), "brightness", 100);
devParam.contrast = GetCfgIntValue(devName.c_str(), "contrast", 4);
devParam.gamma = GetCfgDoubleValue(devName.c_str(), "gamma", 1.00f);
devParam.paperSize = StdStringToUtf8(GetCfgStringValue(devName.c_str(), "paperSize", "匹配原始尺寸"));
devParam.paperCutEnabled = GetCfgBoolValue(devName.c_str(), "paperCutEnabled", false);
devParam.paperCutLeft = GetCfgDoubleValue(devName.c_str(), "paperCutLeft", 0.0f);
devParam.paperCutTop = GetCfgDoubleValue(devName.c_str(), "paperCutTop", 0.0f);
devParam.paperCutRight = GetCfgDoubleValue(devName.c_str(), "paperCutRight", 0.0f);
devParam.paperCutBottom = GetCfgDoubleValue(devName.c_str(), "paperCutBottom", 0.0f);
devParam.autoCrop = GetCfgBoolValue(devName.c_str(), "autoCrop", false);
devParam.colorMode = StdStringToUtf8(GetCfgStringValue(Utf8ToStdString(devName).c_str(), "colorMode", "24位彩色"));
devParam.pageMode = StdStringToUtf8(GetCfgStringValue(Utf8ToStdString(devName).c_str(), "pageMode", "双面"));
devParam.resolution = GetCfgIntValue(Utf8ToStdString(devName).c_str(), "resolution", 200);
devParam.brightness = GetCfgIntValue(Utf8ToStdString(devName).c_str(), "brightness", 100);
devParam.contrast = GetCfgIntValue(Utf8ToStdString(devName).c_str(), "contrast", 4);
devParam.gamma = GetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "gamma", 1.00f);
devParam.paperSize = StdStringToUtf8(GetCfgStringValue(Utf8ToStdString(devName).c_str(), "paperSize", "匹配原始尺寸"));
devParam.paperCutEnabled = GetCfgBoolValue(Utf8ToStdString(devName).c_str(), "paperCutEnabled", false);
devParam.paperCutLeft = GetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutLeft", 0.0f);
devParam.paperCutTop = GetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutTop", 0.0f);
devParam.paperCutRight = GetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutRight", 0.0f);
devParam.paperCutBottom = GetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutBottom", 0.0f);
devParam.autoCrop = GetCfgBoolValue(Utf8ToStdString(devName).c_str(), "autoCrop", false);
}
void ManagerV2::RestoreDeviceParam(const std::string& devName, const DeviceParam& devParam)
{
assert(!devName.empty());
SetCfgStringValue(devName.c_str(), "colorMode", Utf8ToStdString(devParam.colorMode));
SetCfgStringValue(devName.c_str(), "pageMode", Utf8ToStdString(devParam.pageMode));
SetCfgIntValue(devName.c_str(), "resolution", devParam.resolution);
SetCfgIntValue(devName.c_str(), "brightness", devParam.brightness);
SetCfgIntValue(devName.c_str(), "contrast", devParam.contrast);
SetCfgDoubleValue(devName.c_str(), "gamma", devParam.gamma);
SetCfgStringValue(devName.c_str(), "paperSize", Utf8ToStdString(devParam.paperSize));
SetCfgBoolValue(devName.c_str(), "paperCutEnabled", devParam.paperCutEnabled);
SetCfgDoubleValue(devName.c_str(), "paperCutLeft", devParam.paperCutLeft);
SetCfgDoubleValue(devName.c_str(), "paperCutTop", devParam.paperCutTop);
SetCfgDoubleValue(devName.c_str(), "paperCutRight", devParam.paperCutRight);
SetCfgDoubleValue(devName.c_str(), "paperCutBottom", devParam.paperCutBottom);
SetCfgBoolValue(devName.c_str(), "autoCrop", devParam.autoCrop);
SetCfgStringValue(Utf8ToStdString(devName).c_str(), "colorMode", Utf8ToStdString(devParam.colorMode));
SetCfgStringValue(Utf8ToStdString(devName).c_str(), "pageMode", Utf8ToStdString(devParam.pageMode));
SetCfgIntValue(Utf8ToStdString(devName).c_str(), "resolution", devParam.resolution);
SetCfgIntValue(Utf8ToStdString(devName).c_str(), "brightness", devParam.brightness);
SetCfgIntValue(Utf8ToStdString(devName).c_str(), "contrast", devParam.contrast);
SetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "gamma", devParam.gamma);
SetCfgStringValue(Utf8ToStdString(devName).c_str(), "paperSize", Utf8ToStdString(devParam.paperSize));
SetCfgBoolValue(Utf8ToStdString(devName).c_str(), "paperCutEnabled", devParam.paperCutEnabled);
SetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutLeft", devParam.paperCutLeft);
SetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutTop", devParam.paperCutTop);
SetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutRight", devParam.paperCutRight);
SetCfgDoubleValue(Utf8ToStdString(devName).c_str(), "paperCutBottom", devParam.paperCutBottom);
SetCfgBoolValue(Utf8ToStdString(devName).c_str(), "autoCrop", devParam.autoCrop);
}
int ManagerV2::SetParamToDevice(SANE_Handle hdev, const DeviceParam& devParam, HGUInt mask)
@ -1691,6 +1699,18 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_SCAN_FINISHED, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_SetEvent(p->m_scanEvent);
ScanFinishParam* scanFinishParam = new ScanFinishParam;
scanFinishParam->mgr = p;
HGMsg msg;
msg.id = MSGID_SCAN_FINISH;
msg.data = scanFinishParam;
if (HGBASE_ERR_OK != HGBase_PostPumpMessage(p->m_msgPump, &msg))
{
delete scanFinishParam;
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), p->m_saneParam);

View File

@ -172,6 +172,8 @@ namespace ver_2
// 关闭设备
void CloseDev(const CloseDevParam* param);
// 扫描完成
void ScanFinish(const ScanFinishParam* param);
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);

View File

@ -37,6 +37,7 @@ namespace ver_1
{
MSGID_OPEN_DEVICE = 3L,
MSGID_CLOSE_DEVICE,
MSGID_SCAN_FINISH,
MSGID_HTTP_COMMAND,
MSGID_SOCKIO_COMMAND,
MSGID_SOCKIO_EVENT
@ -58,6 +59,11 @@ namespace ver_1
std::string devName;
};
struct ScanFinishParam
{
ManagerV1* mgr;
};
struct HttpCmdParam
{
HttpServer* svr;
@ -89,6 +95,7 @@ namespace ver_2
enum
{
MSGID_CLOSE_DEVICE = 3L,
MSGID_SCAN_FINISH,
MSGID_WS_COMMAND,
MSGID_WS_EVENT
};
@ -102,6 +109,11 @@ namespace ver_2
std::string devName;
};
struct ScanFinishParam
{
ManagerV2* mgr;
};
struct WSCmdParam
{
WSServer* svr;

View File

@ -45,6 +45,13 @@ namespace ver_1
delete param;
}
break;
case MSGID_SCAN_FINISH:
{
ScanFinishParam* param = (ScanFinishParam*)msg->data;
param->mgr->ScanFinish(param);
delete param;
}
break;
case MSGID_HTTP_COMMAND:
{
HttpCmdParam* param = (HttpCmdParam*)msg->data;
@ -102,6 +109,13 @@ namespace ver_2
delete param;
}
break;
case MSGID_SCAN_FINISH:
{
ScanFinishParam* param = (ScanFinishParam*)msg->data;
param->mgr->ScanFinish(param);
delete param;
}
break;
case MSGID_WS_COMMAND:
{
WSCmdParam* param = (WSCmdParam*)msg->data;

View File

@ -36,6 +36,33 @@ namespace ver_2
return ret;
}
static double GetJsonDoubleValue(cJSON* json, const std::string& key, bool* find = NULL)
{
double ret = 0.0;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_Number)
{
ret = p->valuedouble;
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
static bool GetJsonBoolValue(cJSON* json, const std::string& key, bool* find = NULL)
{
bool ret = false;
@ -1492,7 +1519,7 @@ namespace ver_2
if (find)
mask |= DeviceParam::contrastMask;
param.gamma = atof(GetJsonStringValue(json, "gamma", &find).c_str());
param.gamma = GetJsonDoubleValue(json, "gamma", &find);
if (find)
mask |= DeviceParam::gammaMask;
@ -1504,19 +1531,19 @@ namespace ver_2
if (find)
mask |= DeviceParam::paperCutEnabledMask;
param.paperCutLeft = atof(GetJsonStringValue(json, "paper_cut_left", &find).c_str());
param.paperCutLeft = GetJsonDoubleValue(json, "paper_cut_left", &find);
if (find)
mask |= DeviceParam::paperCutLeftMask;
param.paperCutTop = atof(GetJsonStringValue(json, "paper_cut_top", &find).c_str());
param.paperCutTop = GetJsonDoubleValue(json, "paper_cut_top", &find);
if (find)
mask |= DeviceParam::paperCutTopMask;
param.paperCutRight = atof(GetJsonStringValue(json, "paper_cut_right", &find).c_str());
param.paperCutRight = GetJsonDoubleValue(json, "paper_cut_right", &find);
if (find)
mask |= DeviceParam::paperCutRightMask;
param.paperCutBottom = atof(GetJsonStringValue(json, "paper_cut_bottom", &find).c_str());
param.paperCutBottom = GetJsonDoubleValue(json, "paper_cut_bottom", &find);
if (find)
mask |= DeviceParam::paperCutBottomMask;
@ -1574,18 +1601,18 @@ namespace ver_2
fmt += "\"contrast_min\":%d, ";
fmt += "\"contrast_max\":%d, ";
fmt += "\"contrast\":%d, ";
fmt += "\"gamma_min\":\"%s\", ";
fmt += "\"gamma_max\":\"%s\", ";
fmt += "\"gamma\":\"%s\", ";
fmt += "\"gamma_min\":%f, ";
fmt += "\"gamma_max\":%f, ";
fmt += "\"gamma\":%f, ";
fmt += "\"paper_size_list\":%s, ";
fmt += "\"paper_size\":\"%s\", ";
fmt += "\"paper_size_width\":\"%s\", ";
fmt += "\"paper_size_height\":\"%s\", ";
fmt += "\"paper_size_width\":%f, ";
fmt += "\"paper_size_height\":%f, ";
fmt += "\"paper_cut_enabled\":%s, ";
fmt += "\"paper_cut_left\":\"%s\", ";
fmt += "\"paper_cut_top\":\"%s\", ";
fmt += "\"paper_cut_right\":\"%s\", ";
fmt += "\"paper_cut_bottom\":\"%s\", ";
fmt += "\"paper_cut_left\":%f, ";
fmt += "\"paper_cut_top\":%f, ";
fmt += "\"paper_cut_right\":%f, ";
fmt += "\"paper_cut_bottom\":%f, ";
fmt += "\"auto_crop\":%s}";
std::string colorModeList = "[";
@ -1640,35 +1667,20 @@ namespace ver_2
}
paperSizeList += "]";
char gammaMin[32], gammaMax[32], gamma[32];
sprintf(gammaMin, "%f", param.gammaMin);
sprintf(gammaMax, "%f", param.gammaMax);
sprintf(gamma, "%f", param.gamma);
char paperSizeWidth[32], paperSizeHeight[32];
sprintf(paperSizeWidth, "%f", param.paperSizeWidth);
sprintf(paperSizeHeight, "%f", param.paperSizeHeight);
char paperCutLeft[32], paperCutTop[32], paperCutRight[32], paperCutBottom[32];
sprintf(paperCutLeft, "%f", param.paperCutLeft);
sprintf(paperCutTop, "%f", param.paperCutTop);
sprintf(paperCutRight, "%f", param.paperCutRight);
sprintf(paperCutBottom, "%f", param.paperCutBottom);
char resp[2048];
if (findIden)
sprintf(resp, fmt.c_str(), "get_device_param", iden.c_str(), ret, StdStringToUtf8(errInfo).c_str(), colorModeList.c_str(),
param.colorMode.c_str(), pageModeList.c_str(), param.pageMode.c_str(), resolutionList.c_str(), param.resolution,
param.brightnessMin, param.brightnessMax, param.brightness, param.contrastMin, param.contrastMax, param.contrast,
gammaMin, gammaMax, gamma, paperSizeList.c_str(), param.paperSize.c_str(), paperSizeWidth, paperSizeHeight,
param.paperCutEnabled ? "true" : "false", paperCutLeft, paperCutTop, paperCutRight, paperCutBottom,
param.gammaMin, param.gammaMax, param.gamma, paperSizeList.c_str(), param.paperSize.c_str(), param.paperSizeWidth, param.paperSizeHeight,
param.paperCutEnabled ? "true" : "false", param.paperCutLeft, param.paperCutTop, param.paperCutRight, param.paperCutBottom,
param.autoCrop ? "true" : "false");
else
sprintf(resp, fmt.c_str(), "get_device_param", ret, StdStringToUtf8(errInfo).c_str(), colorModeList.c_str(),
param.colorMode.c_str(), pageModeList.c_str(), param.pageMode.c_str(), resolutionList.c_str(), param.resolution,
param.brightnessMin, param.brightnessMax, param.brightness, param.contrastMin, param.contrastMax, param.contrast,
gammaMin, gammaMax, gamma, paperSizeList.c_str(), param.paperSize.c_str(), paperSizeWidth, paperSizeHeight,
param.paperCutEnabled ? "true" : "false", paperCutLeft, paperCutTop, paperCutRight, paperCutBottom,
param.gammaMin, param.gammaMax, param.gamma, paperSizeList.c_str(), param.paperSize.c_str(), param.paperSizeWidth, param.paperSizeHeight,
param.paperCutEnabled ? "true" : "false", param.paperCutLeft, param.paperCutTop, param.paperCutRight, param.paperCutBottom,
param.autoCrop ? "true" : "false");
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
}

View File

@ -173,7 +173,8 @@
function SetGlobalParam()
{
socket.send(JSON.stringify({
'func':'set_global_config'
'func':'set_global_config',
'image_format':'bmp'
}));
}
@ -287,7 +288,9 @@
function SetDeviceParam()
{
socket.send(JSON.stringify({
'func':'set_device_param'
'func':'set_device_param',
'color_mode':'256级灰度',
'gamma':2.000000
}));
}