webscan项目增加立思辰新webapi接口
This commit is contained in:
parent
57327408d8
commit
e705ba136a
|
@ -4,8 +4,9 @@
|
||||||
WebServer::WebServer(HGMsgPump msgPump)
|
WebServer::WebServer(HGMsgPump msgPump)
|
||||||
{
|
{
|
||||||
m_msgPump = msgPump;
|
m_msgPump = msgPump;
|
||||||
|
|
||||||
m_currUserId = 1;
|
m_currUserId = 1;
|
||||||
|
|
||||||
|
m_port = 0;
|
||||||
#if defined(HG_CMP_MSC)
|
#if defined(HG_CMP_MSC)
|
||||||
m_sockServer = INVALID_SOCKET;
|
m_sockServer = INVALID_SOCKET;
|
||||||
#else
|
#else
|
||||||
|
@ -75,6 +76,7 @@ bool WebServer::Open(HGUShort port)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_port = port;
|
||||||
m_sockServer = sockServer;
|
m_sockServer = sockServer;
|
||||||
HGBase_OpenThread(ThreadFunc, this, &m_listenThread);
|
HGBase_OpenThread(ThreadFunc, this, &m_listenThread);
|
||||||
assert(NULL != m_listenThread);
|
assert(NULL != m_listenThread);
|
||||||
|
@ -92,6 +94,17 @@ bool WebServer::Close()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HG_CMP_MSC)
|
||||||
|
closesocket(m_sockServer);
|
||||||
|
m_sockServer = INVALID_SOCKET;
|
||||||
|
#else
|
||||||
|
close(m_sockServer);
|
||||||
|
m_sockServer = -1;
|
||||||
|
#endif
|
||||||
|
m_port = 0;
|
||||||
|
HGBase_CloseThread(m_listenThread);
|
||||||
|
m_listenThread = NULL;
|
||||||
|
|
||||||
while (!m_vectorUser.empty())
|
while (!m_vectorUser.empty())
|
||||||
{
|
{
|
||||||
WebUser* pUser = m_vectorUser[0];
|
WebUser* pUser = m_vectorUser[0];
|
||||||
|
@ -100,18 +113,14 @@ bool WebServer::Close()
|
||||||
pUser = NULL;
|
pUser = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HG_CMP_MSC)
|
|
||||||
closesocket(m_sockServer);
|
|
||||||
m_sockServer = INVALID_SOCKET;
|
|
||||||
#else
|
|
||||||
close(m_sockServer);
|
|
||||||
m_sockServer = -1;
|
|
||||||
#endif
|
|
||||||
HGBase_CloseThread(m_listenThread);
|
|
||||||
m_listenThread = NULL;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WebServer::IsOld()
|
||||||
|
{
|
||||||
|
return (9458 == m_port);
|
||||||
|
}
|
||||||
|
|
||||||
void WebServer::Connect(const ConnectParam* param)
|
void WebServer::Connect(const ConnectParam* param)
|
||||||
{
|
{
|
||||||
assert(NULL != param && this == param->svr);
|
assert(NULL != param && this == param->svr);
|
||||||
|
@ -232,6 +241,7 @@ int WebServer::GetUserIndex(HGUInt id)
|
||||||
|
|
||||||
void HGAPI WebServer::ThreadFunc(HGThread thread, HGPointer param)
|
void HGAPI WebServer::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
{
|
{
|
||||||
|
(void)thread;
|
||||||
WebServer* p = (WebServer*)param;
|
WebServer* p = (WebServer*)param;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -15,6 +15,7 @@ public:
|
||||||
|
|
||||||
bool Open(HGUShort port);
|
bool Open(HGUShort port);
|
||||||
bool Close();
|
bool Close();
|
||||||
|
bool IsOld();
|
||||||
|
|
||||||
void Connect(const ConnectParam* param);
|
void Connect(const ConnectParam* param);
|
||||||
void DisConnect(const DisConnectParam* param);
|
void DisConnect(const DisConnectParam* param);
|
||||||
|
@ -34,8 +35,9 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HGMsgPump m_msgPump;
|
HGMsgPump m_msgPump;
|
||||||
|
|
||||||
HGUInt m_currUserId;
|
HGUInt m_currUserId;
|
||||||
|
|
||||||
|
HGUShort m_port;
|
||||||
#if defined(HG_CMP_MSC)
|
#if defined(HG_CMP_MSC)
|
||||||
SOCKET m_sockServer;
|
SOCKET m_sockServer;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -211,7 +211,6 @@ WebUser::WebUser(WebServer* server, HGUInt id, HGMsgPump msgPump, const std::str
|
||||||
m_devNameList.clear();
|
m_devNameList.clear();
|
||||||
m_devName.clear();
|
m_devName.clear();
|
||||||
m_devHandle = NULL;
|
m_devHandle = NULL;
|
||||||
m_dpi = 0;
|
|
||||||
m_scanEvent = NULL;
|
m_scanEvent = NULL;
|
||||||
|
|
||||||
SANE_Int version_code = 0;
|
SANE_Int version_code = 0;
|
||||||
|
@ -232,7 +231,6 @@ WebUser::~WebUser()
|
||||||
|
|
||||||
if (NULL != m_devHandle)
|
if (NULL != m_devHandle)
|
||||||
{
|
{
|
||||||
m_dpi = 0;
|
|
||||||
sane_close(m_devHandle);
|
sane_close(m_devHandle);
|
||||||
m_devHandle = NULL;
|
m_devHandle = NULL;
|
||||||
m_devName.clear();
|
m_devName.clear();
|
||||||
|
@ -284,7 +282,6 @@ void WebUser::CloseDev(const CloseDevParam* param)
|
||||||
|
|
||||||
if (NULL != m_devHandle)
|
if (NULL != m_devHandle)
|
||||||
{
|
{
|
||||||
m_dpi = 0;
|
|
||||||
sane_close(m_devHandle);
|
sane_close(m_devHandle);
|
||||||
m_devHandle = NULL;
|
m_devHandle = NULL;
|
||||||
m_devName.clear();
|
m_devName.clear();
|
||||||
|
@ -310,11 +307,17 @@ void WebUser::ScanFinish(const ScanFinishParam* param)
|
||||||
void WebUser::HandleCmd(const WSCmdParam* param)
|
void WebUser::HandleCmd(const WSCmdParam* param)
|
||||||
{
|
{
|
||||||
assert(NULL != param && m_id == param->usrId);
|
assert(NULL != param && m_id == param->usrId);
|
||||||
|
|
||||||
std::string cmdData((const char*)param->data, param->size);
|
std::string cmdData((const char*)param->data, param->size);
|
||||||
cJSON* json = cJSON_Parse(cmdData.c_str());
|
|
||||||
if (NULL != json)
|
if (m_server->IsOld())
|
||||||
{
|
{
|
||||||
|
// OLD
|
||||||
|
cJSON* json = cJSON_Parse(cmdData.c_str());
|
||||||
|
if (NULL == json)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::string func = GetJsonStringValue(json, "Func");
|
std::string func = GetJsonStringValue(json, "Func");
|
||||||
if ("GetDeviceList" == func)
|
if ("GetDeviceList" == func)
|
||||||
{
|
{
|
||||||
|
@ -347,6 +350,26 @@ void WebUser::HandleCmd(const WSCmdParam* param)
|
||||||
|
|
||||||
cJSON_Delete(json);
|
cJSON_Delete(json);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// NEW
|
||||||
|
if (cmdData == "CDEV")
|
||||||
|
{
|
||||||
|
GetDeviceListNew();
|
||||||
|
}
|
||||||
|
else if (cmdData == "CDEVPLUG")
|
||||||
|
{
|
||||||
|
DeviceListPlugNew();
|
||||||
|
}
|
||||||
|
else if (cmdData.find("COPT|") == 0)
|
||||||
|
{
|
||||||
|
GetSettingInfoNew(cmdData.substr(5));
|
||||||
|
}
|
||||||
|
else if (cmdData.find("CBASE64|") == 0)
|
||||||
|
{
|
||||||
|
ConvertToBase64New(cmdData.substr(8));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebUser::HandleEvent(const WSEvtParam* param)
|
void WebUser::HandleEvent(const WSEvtParam* param)
|
||||||
|
@ -423,7 +446,6 @@ void WebUser::SelectDevice(cJSON* json)
|
||||||
|
|
||||||
if (NULL != m_devHandle)
|
if (NULL != m_devHandle)
|
||||||
{
|
{
|
||||||
m_dpi = 0;
|
|
||||||
sane_close(m_devHandle);
|
sane_close(m_devHandle);
|
||||||
m_devHandle = NULL;
|
m_devHandle = NULL;
|
||||||
m_devName.clear();
|
m_devName.clear();
|
||||||
|
@ -435,7 +457,6 @@ void WebUser::SelectDevice(cJSON* json)
|
||||||
{
|
{
|
||||||
m_devName = m_devNameList[index];
|
m_devName = m_devNameList[index];
|
||||||
m_devHandle = dev;
|
m_devHandle = dev;
|
||||||
m_dpi = GetDpi();
|
|
||||||
code = 0;
|
code = 0;
|
||||||
result.clear();
|
result.clear();
|
||||||
}
|
}
|
||||||
|
@ -520,7 +541,6 @@ void WebUser::SetDPI(cJSON* json)
|
||||||
{
|
{
|
||||||
if (SetParam(OPTION_TITLE_FBL, &dpi))
|
if (SetParam(OPTION_TITLE_FBL, &dpi))
|
||||||
{
|
{
|
||||||
m_dpi = dpi;
|
|
||||||
code = 0;
|
code = 0;
|
||||||
result.clear();
|
result.clear();
|
||||||
}
|
}
|
||||||
|
@ -681,6 +701,374 @@ void WebUser::StartScan(cJSON* json)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebUser::GetDeviceListNew()
|
||||||
|
{
|
||||||
|
cJSON* retJson = cJSON_CreateObject();
|
||||||
|
if (NULL != retJson)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SDEV"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2005));
|
||||||
|
|
||||||
|
std::string dataStr;
|
||||||
|
|
||||||
|
cJSON* arrayJson = cJSON_CreateArray();
|
||||||
|
HGBase_EnterLock(m_lockName);
|
||||||
|
for (int i = 0; i < (int)m_devNameList.size(); ++i)
|
||||||
|
{
|
||||||
|
cJSON* js = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(js, "Index", cJSON_CreateNumber(i));
|
||||||
|
cJSON_AddItemToObject(js, "Name", cJSON_CreateString(m_devNameList[i].c_str()));
|
||||||
|
cJSON_AddItemToArray(arrayJson, js);
|
||||||
|
}
|
||||||
|
HGBase_LeaveLock(m_lockName);
|
||||||
|
|
||||||
|
cJSON* dataJson = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(dataJson, "Devs", arrayJson);
|
||||||
|
|
||||||
|
char* str = cJSON_Print(dataJson);
|
||||||
|
if (NULL != str)
|
||||||
|
{
|
||||||
|
dataStr = GetBase64((HGByte*)str, strlen(str));
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||||
|
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("json"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||||
|
|
||||||
|
char* resp = cJSON_Print(retJson);
|
||||||
|
if (NULL != resp)
|
||||||
|
{
|
||||||
|
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||||
|
free(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(retJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebUser::DeviceListPlugNew()
|
||||||
|
{
|
||||||
|
cJSON* retJson = cJSON_CreateObject();
|
||||||
|
if (NULL != retJson)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SDEVPLUG"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2005));
|
||||||
|
|
||||||
|
std::string dataStr;
|
||||||
|
|
||||||
|
cJSON* arrayJson = cJSON_CreateArray();
|
||||||
|
HGBase_EnterLock(m_lockName);
|
||||||
|
for (int i = 0; i < (int)m_devNameList.size(); ++i)
|
||||||
|
{
|
||||||
|
cJSON* js = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(js, "Index", cJSON_CreateNumber(i));
|
||||||
|
cJSON_AddItemToObject(js, "Name", cJSON_CreateString(m_devNameList[i].c_str()));
|
||||||
|
cJSON_AddItemToArray(arrayJson, js);
|
||||||
|
}
|
||||||
|
HGBase_LeaveLock(m_lockName);
|
||||||
|
|
||||||
|
cJSON* dataJson = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(dataJson, "Devs", arrayJson);
|
||||||
|
|
||||||
|
char* str = cJSON_Print(dataJson);
|
||||||
|
if (NULL != str)
|
||||||
|
{
|
||||||
|
dataStr = GetBase64((HGByte*)str, strlen(str));
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||||
|
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("json"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||||
|
|
||||||
|
char* resp = cJSON_Print(retJson);
|
||||||
|
if (NULL != resp)
|
||||||
|
{
|
||||||
|
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||||
|
free(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(retJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebUser::GetSettingInfoNew(const std::string& devName)
|
||||||
|
{
|
||||||
|
if (NULL != m_scanEvent)
|
||||||
|
{
|
||||||
|
assert(NULL != m_devHandle);
|
||||||
|
sane_cancel(m_devHandle);
|
||||||
|
|
||||||
|
HGBase_WaitEvent(m_scanEvent);
|
||||||
|
HGBase_DestroyEvent(m_scanEvent);
|
||||||
|
m_scanEvent = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL != m_devHandle)
|
||||||
|
{
|
||||||
|
if (m_devName != devName)
|
||||||
|
{
|
||||||
|
sane_close(m_devHandle);
|
||||||
|
m_devHandle = NULL;
|
||||||
|
m_devName.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == m_devHandle)
|
||||||
|
{
|
||||||
|
SANE_Handle dev = NULL;
|
||||||
|
SANE_Status status = sane_open(devName.c_str(), &dev);
|
||||||
|
if (SANE_STATUS_GOOD == status)
|
||||||
|
{
|
||||||
|
m_devName = devName;
|
||||||
|
m_devHandle = dev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL != m_devHandle)
|
||||||
|
{
|
||||||
|
cJSON* retJson = cJSON_CreateObject();
|
||||||
|
if (NULL != retJson)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SOPT"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2006));
|
||||||
|
|
||||||
|
std::string optStr;
|
||||||
|
std::string optListStr;
|
||||||
|
|
||||||
|
cJSON* optJson = cJSON_CreateObject();
|
||||||
|
if (NULL != optJson)
|
||||||
|
{
|
||||||
|
cJSON* optListJson = cJSON_CreateObject();
|
||||||
|
if (NULL != optListJson)
|
||||||
|
{
|
||||||
|
cJSON* arrayJson = cJSON_CreateArray();
|
||||||
|
|
||||||
|
SANE_Int num_dev_options = 0;
|
||||||
|
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
||||||
|
for (int i = 1; i < num_dev_options; ++i)
|
||||||
|
{
|
||||||
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
||||||
|
if (NULL == desp)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const char* name = desp->title;
|
||||||
|
while (' ' == *name)
|
||||||
|
++name;
|
||||||
|
|
||||||
|
if (SANE_TYPE_STRING == desp->type)
|
||||||
|
{
|
||||||
|
char value[256] = { 0 };
|
||||||
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL);
|
||||||
|
cJSON_AddItemToObject(optJson, name, cJSON_CreateString(value));
|
||||||
|
|
||||||
|
cJSON* objJson = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(3));
|
||||||
|
cJSON_AddItemToObject(objJson, "current", cJSON_CreateString(value));
|
||||||
|
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||||
|
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||||
|
|
||||||
|
if (SANE_CONSTRAINT_STRING_LIST == desp->constraint_type)
|
||||||
|
{
|
||||||
|
cJSON* arrayJson2 = cJSON_CreateArray();
|
||||||
|
const SANE_String_Const* p = desp->constraint.string_list;
|
||||||
|
while (NULL != *p)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToArray(arrayJson2, cJSON_CreateString(*p));
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "list", arrayJson2);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||||
|
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(3));
|
||||||
|
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||||
|
|
||||||
|
cJSON_AddItemToArray(arrayJson, objJson);
|
||||||
|
}
|
||||||
|
else if (SANE_TYPE_INT == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Int value = 0;
|
||||||
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||||
|
cJSON_AddItemToObject(optJson, name, cJSON_CreateNumber(value));
|
||||||
|
|
||||||
|
cJSON* objJson = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(1));
|
||||||
|
cJSON_AddItemToObject(objJson, "current", cJSON_CreateNumber(value));
|
||||||
|
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||||
|
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||||
|
|
||||||
|
if (SANE_CONSTRAINT_WORD_LIST == desp->constraint_type)
|
||||||
|
{
|
||||||
|
cJSON* arrayJson2 = cJSON_CreateArray();
|
||||||
|
const SANE_Word* p = desp->constraint.word_list;
|
||||||
|
for (SANE_Int i = 0; i < p[0]; ++i)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToArray(arrayJson2, cJSON_CreateNumber(p[i + 1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "list", arrayJson2);
|
||||||
|
}
|
||||||
|
else if (SANE_CONSTRAINT_RANGE == desp->constraint_type)
|
||||||
|
{
|
||||||
|
// desp->constraint.range->min;
|
||||||
|
// desp->constraint.range->max;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||||
|
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(1));
|
||||||
|
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||||
|
|
||||||
|
cJSON_AddItemToArray(arrayJson, objJson);
|
||||||
|
}
|
||||||
|
else if (SANE_TYPE_FIXED == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Word value = 0;
|
||||||
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||||
|
cJSON_AddItemToObject(optJson, name, cJSON_CreateNumber(SANE_UNFIX(value)));
|
||||||
|
|
||||||
|
cJSON* objJson = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(2));
|
||||||
|
cJSON_AddItemToObject(objJson, "current", cJSON_CreateNumber(SANE_UNFIX(value)));
|
||||||
|
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||||
|
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||||
|
|
||||||
|
if (SANE_CONSTRAINT_WORD_LIST == desp->constraint_type)
|
||||||
|
{
|
||||||
|
cJSON* arrayJson2 = cJSON_CreateArray();
|
||||||
|
const SANE_Word* p = desp->constraint.word_list;
|
||||||
|
for (SANE_Int i = 0; i < p[0]; ++i)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToArray(arrayJson2, cJSON_CreateNumber(SANE_UNFIX(p[i + 1])));
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "list", arrayJson2);
|
||||||
|
}
|
||||||
|
else if (SANE_CONSTRAINT_RANGE == desp->constraint_type)
|
||||||
|
{
|
||||||
|
// SANE_UNFIX(desp->constraint.range->min);
|
||||||
|
// SANE_UNFIX(desp->constraint.range->max);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||||
|
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(2));
|
||||||
|
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||||
|
|
||||||
|
cJSON_AddItemToArray(arrayJson, objJson);
|
||||||
|
}
|
||||||
|
else if (SANE_TYPE_BOOL == desp->type)
|
||||||
|
{
|
||||||
|
SANE_Bool value = 0;
|
||||||
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||||
|
cJSON_AddItemToObject(optJson, name, value ? cJSON_CreateTrue() : cJSON_CreateFalse());
|
||||||
|
|
||||||
|
cJSON* objJson = cJSON_CreateObject();
|
||||||
|
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(0));
|
||||||
|
cJSON_AddItemToObject(objJson, "current", value ? cJSON_CreateTrue() : cJSON_CreateFalse());
|
||||||
|
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||||
|
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||||
|
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(0));
|
||||||
|
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||||
|
|
||||||
|
cJSON_AddItemToArray(arrayJson, objJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(optListJson, "Options", arrayJson);
|
||||||
|
|
||||||
|
char* str = cJSON_Print(optListJson);
|
||||||
|
if (NULL != str)
|
||||||
|
{
|
||||||
|
optListStr = GetBase64((HGByte*)str, strlen(str));
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(optListJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
char* str = cJSON_Print(optJson);
|
||||||
|
if (NULL != str)
|
||||||
|
{
|
||||||
|
optStr = GetBase64((HGByte*)str, strlen(str));
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(optJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string dataStr = optStr + "|" + optListStr;
|
||||||
|
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||||
|
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("json"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||||
|
|
||||||
|
char* resp = cJSON_Print(retJson);
|
||||||
|
if (NULL != resp)
|
||||||
|
{
|
||||||
|
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||||
|
free(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(retJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WebUser::ConvertToBase64New(const std::string& filePath)
|
||||||
|
{
|
||||||
|
cJSON* retJson = cJSON_CreateObject();
|
||||||
|
if (NULL != retJson)
|
||||||
|
{
|
||||||
|
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SBASE64"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2007));
|
||||||
|
|
||||||
|
std::string dataStr;
|
||||||
|
FILE* file = fopen(filePath.c_str(), "rb");
|
||||||
|
if (NULL != file)
|
||||||
|
{
|
||||||
|
fseek(file, 0, SEEK_END);
|
||||||
|
long size = ftell(file);
|
||||||
|
fseek(file, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if (size > 0)
|
||||||
|
{
|
||||||
|
HGByte* data = new HGByte[size];
|
||||||
|
long readLen = (long)fread(data, 1, size, file);
|
||||||
|
if (readLen == size)
|
||||||
|
{
|
||||||
|
HGSize base64Size = 0;
|
||||||
|
HGBase_Base64Encode(data, size, NULL, &base64Size);
|
||||||
|
uint8_t* base64Data = new uint8_t[base64Size + 1];
|
||||||
|
HGBase_Base64Encode(data, size, base64Data, &base64Size);
|
||||||
|
base64Data[base64Size] = 0;
|
||||||
|
dataStr = (const char*)base64Data;
|
||||||
|
delete[] base64Data;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] data;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||||
|
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("base64"));
|
||||||
|
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||||
|
|
||||||
|
char* resp = cJSON_Print(retJson);
|
||||||
|
if (NULL != resp)
|
||||||
|
{
|
||||||
|
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||||
|
free(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(retJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WebUser::PostDisConnectMsg()
|
void WebUser::PostDisConnectMsg()
|
||||||
{
|
{
|
||||||
DisConnectParam* param = new DisConnectParam;
|
DisConnectParam* param = new DisConnectParam;
|
||||||
|
@ -738,6 +1126,7 @@ void WebUser::PostEventMsg(const HGByte* data, HGUInt dataSize)
|
||||||
|
|
||||||
void HGAPI WebUser::ThreadFunc(HGThread thread, HGPointer param)
|
void HGAPI WebUser::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
{
|
{
|
||||||
|
(void)thread;
|
||||||
WebUser* p = (WebUser*)param;
|
WebUser* p = (WebUser*)param;
|
||||||
|
|
||||||
char chBuffer[2048];
|
char chBuffer[2048];
|
||||||
|
@ -1042,6 +1431,12 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
||||||
HGBase_EnterLock(p->m_lockName);
|
HGBase_EnterLock(p->m_lockName);
|
||||||
p->m_devNameList.push_back(sane_dev->name);
|
p->m_devNameList.push_back(sane_dev->name);
|
||||||
HGBase_LeaveLock(p->m_lockName);
|
HGBase_LeaveLock(p->m_lockName);
|
||||||
|
|
||||||
|
if (!p->m_server->IsOld())
|
||||||
|
{
|
||||||
|
std::string cmd = "CDEVPLUG";
|
||||||
|
p->PostCmdMsg((const HGByte*)cmd.c_str(), (HGUInt)cmd.size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SANE_EVENT_DEVICE_LEFT:
|
case SANE_EVENT_DEVICE_LEFT:
|
||||||
|
@ -1061,16 +1456,24 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
||||||
delete closeDevParam;
|
delete closeDevParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool b = false;
|
||||||
HGBase_EnterLock(p->m_lockName);
|
HGBase_EnterLock(p->m_lockName);
|
||||||
for (int i = 0; i < (int)p->m_devNameList.size(); ++i)
|
for (int i = 0; i < (int)p->m_devNameList.size(); ++i)
|
||||||
{
|
{
|
||||||
if (0 == strcmp(sane_dev->name, p->m_devNameList[i].c_str()))
|
if (0 == strcmp(sane_dev->name, p->m_devNameList[i].c_str()))
|
||||||
{
|
{
|
||||||
p->m_devNameList.erase(p->m_devNameList.begin() + i);
|
p->m_devNameList.erase(p->m_devNameList.begin() + i);
|
||||||
|
b = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HGBase_LeaveLock(p->m_lockName);
|
HGBase_LeaveLock(p->m_lockName);
|
||||||
|
|
||||||
|
if (b && !p->m_server->IsOld())
|
||||||
|
{
|
||||||
|
std::string cmd = "CDEVPLUG";
|
||||||
|
p->PostCmdMsg((const HGByte*)cmd.c_str(), (HGUInt)cmd.size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SANE_EVENT_WORKING:
|
case SANE_EVENT_WORKING:
|
||||||
|
@ -1094,6 +1497,8 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
||||||
delete scanFinishParam;
|
delete scanFinishParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p->m_server->IsOld())
|
||||||
|
{
|
||||||
int code = 0;
|
int code = 0;
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
|
|
||||||
|
@ -1116,6 +1521,7 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
||||||
cJSON_Delete(retJson);
|
cJSON_Delete(retJson);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SANE_EVENT_STATUS:
|
case SANE_EVENT_STATUS:
|
||||||
{
|
{
|
||||||
|
@ -1150,8 +1556,10 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
||||||
HGBase_CreateImageFromData(data, &imgInfo, NULL, 0, HGBASE_IMGORIGIN_TOP, &img);
|
HGBase_CreateImageFromData(data, &imgInfo, NULL, 0, HGBASE_IMGORIGIN_TOP, &img);
|
||||||
if (NULL != img)
|
if (NULL != img)
|
||||||
{
|
{
|
||||||
HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi);
|
HGBase_SetImageDpi(img, sane_img->flag.dpi, sane_img->flag.dpi);
|
||||||
|
|
||||||
|
if (p->m_server->IsOld())
|
||||||
|
{
|
||||||
int code = 0;
|
int code = 0;
|
||||||
std::string result = p->GetBase64(img);
|
std::string result = p->GetBase64(img);
|
||||||
|
|
||||||
|
@ -1173,6 +1581,7 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
||||||
|
|
||||||
cJSON_Delete(retJson);
|
cJSON_Delete(retJson);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HGBase_DestroyImage(img);
|
HGBase_DestroyImage(img);
|
||||||
}
|
}
|
||||||
|
@ -1221,6 +1630,23 @@ std::string WebUser::GetBase64(HGImage image)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string WebUser::GetBase64(const HGByte* data, HGUInt size)
|
||||||
|
{
|
||||||
|
std::string ret;
|
||||||
|
if (NULL != data && 0 != size)
|
||||||
|
{
|
||||||
|
HGSize base64Size = 0;
|
||||||
|
HGBase_Base64Encode(data, size, NULL, &base64Size);
|
||||||
|
HGByte* base64 = new HGByte[base64Size + 1];
|
||||||
|
HGBase_Base64Encode(data, size, base64, &base64Size);
|
||||||
|
base64[base64Size] = 0;
|
||||||
|
ret = (const char*)base64;
|
||||||
|
delete[] base64;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
|
HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
|
||||||
{
|
{
|
||||||
assert(NULL != m_devHandle);
|
assert(NULL != m_devHandle);
|
||||||
|
@ -1277,39 +1703,6 @@ HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
HGInt WebUser::GetDpi()
|
|
||||||
{
|
|
||||||
assert(NULL != m_devHandle);
|
|
||||||
HGInt dpi = 0;
|
|
||||||
|
|
||||||
SANE_Int num_dev_options = 0;
|
|
||||||
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
||||||
for (int i = 1; i < num_dev_options; ++i)
|
|
||||||
{
|
|
||||||
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
||||||
if (NULL == desp)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const char* name = desp->title;
|
|
||||||
while (' ' == *name)
|
|
||||||
++name;
|
|
||||||
|
|
||||||
if (0 == strcmp(OPTION_TITLE_FBL, name))
|
|
||||||
{
|
|
||||||
if (SANE_TYPE_INT == desp->type)
|
|
||||||
{
|
|
||||||
SANE_Int value = 0;
|
|
||||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
||||||
dpi = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dpi;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WebUser::ShakeHand(const std::string& head)
|
bool WebUser::ShakeHand(const std::string& head)
|
||||||
{
|
{
|
||||||
std::string requestMethod;
|
std::string requestMethod;
|
||||||
|
|
|
@ -32,6 +32,7 @@ public:
|
||||||
void HandleEvent(const WSEvtParam* param);
|
void HandleEvent(const WSEvtParam* param);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// OLD
|
||||||
void GetDeviceList(cJSON *json);
|
void GetDeviceList(cJSON *json);
|
||||||
void SelectDevice(cJSON* json);
|
void SelectDevice(cJSON* json);
|
||||||
void SetScanColorType(cJSON* json);
|
void SetScanColorType(cJSON* json);
|
||||||
|
@ -39,6 +40,11 @@ private:
|
||||||
void SetDuplex(cJSON* json);
|
void SetDuplex(cJSON* json);
|
||||||
void SetScanJPGQuality(cJSON* json);
|
void SetScanJPGQuality(cJSON* json);
|
||||||
void StartScan(cJSON* json);
|
void StartScan(cJSON* json);
|
||||||
|
//NEW
|
||||||
|
void GetDeviceListNew();
|
||||||
|
void DeviceListPlugNew();
|
||||||
|
void GetSettingInfoNew(const std::string &devName);
|
||||||
|
void ConvertToBase64New(const std::string& filePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void PostDisConnectMsg();
|
void PostDisConnectMsg();
|
||||||
|
@ -47,8 +53,8 @@ private:
|
||||||
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
|
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
|
||||||
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
|
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
|
||||||
std::string GetBase64(HGImage image);
|
std::string GetBase64(HGImage image);
|
||||||
|
std::string GetBase64(const HGByte* data, HGUInt size);
|
||||||
HGBool SetParam(const char* optionName, const HGVoid* data);
|
HGBool SetParam(const char* optionName, const HGVoid* data);
|
||||||
HGInt GetDpi();
|
|
||||||
|
|
||||||
bool ShakeHand(const std::string& head);
|
bool ShakeHand(const std::string& head);
|
||||||
void Pong();
|
void Pong();
|
||||||
|
@ -73,6 +79,5 @@ private:
|
||||||
std::vector<std::string> m_devNameList;
|
std::vector<std::string> m_devNameList;
|
||||||
std::string m_devName;
|
std::string m_devName;
|
||||||
SANE_Handle m_devHandle;
|
SANE_Handle m_devHandle;
|
||||||
int m_dpi;
|
|
||||||
HGEvent m_scanEvent;
|
HGEvent m_scanEvent;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,17 +2,27 @@
|
||||||
#include "base/HGInc.h"
|
#include "base/HGInc.h"
|
||||||
#include "base/HGThread.h"
|
#include "base/HGThread.h"
|
||||||
#include "base/HGMsgPump.h"
|
#include "base/HGMsgPump.h"
|
||||||
|
#include "base/HGUtility.h"
|
||||||
|
#include "base/HGIni.h"
|
||||||
#include "WebServer.h"
|
#include "WebServer.h"
|
||||||
#include "MsgPumpCallback.h"
|
#include "MsgPumpCallback.h"
|
||||||
|
#include "lang/app_language.h"
|
||||||
|
|
||||||
static void HGAPI ThreadFunc(HGThread thread, HGPointer param)
|
static void HGAPI ThreadFunc(HGThread thread, HGPointer param)
|
||||||
{
|
{
|
||||||
(void)thread;
|
(void)thread;
|
||||||
HGMsgPump msgPump = (HGMsgPump)param;
|
HGMsgPump msgPump = (HGMsgPump)param;
|
||||||
|
|
||||||
|
HGChar cfgPath[256];
|
||||||
|
HGBase_GetConfigPath(cfgPath, 256);
|
||||||
|
HGChar cfgName[256];
|
||||||
|
sprintf(cfgName, "%s%s", cfgPath, "config.ini");
|
||||||
|
|
||||||
WebServer wsServer(msgPump);
|
WebServer wsServer(msgPump);
|
||||||
|
|
||||||
HGInt port = 9458;
|
//HGInt port = 9458;
|
||||||
|
HGInt port = 23165;
|
||||||
|
HGBase_GetProfileInt(cfgName, "connect", "port", 23165, &port);
|
||||||
if (wsServer.Open(port))
|
if (wsServer.Open(port))
|
||||||
{
|
{
|
||||||
HGBase_RunMsgPump(msgPump, HGMsgPumpCallback, NULL);
|
HGBase_RunMsgPump(msgPump, HGMsgPumpCallback, NULL);
|
||||||
|
@ -32,6 +42,9 @@ int main()
|
||||||
assert(0 == ret);
|
assert(0 == ret);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
lang_initialize(nullptr);
|
||||||
|
lang_set_code_page(20127);
|
||||||
|
|
||||||
HGMsgPump msgPump = NULL;
|
HGMsgPump msgPump = NULL;
|
||||||
HGBase_CreateMsgPump(&msgPump);
|
HGBase_CreateMsgPump(&msgPump);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue