This commit is contained in:
yangjiaxuan 2023-05-16 18:31:49 +08:00
commit 23979437ef
13 changed files with 176 additions and 155 deletions

View File

@ -2,9 +2,11 @@ LIBRARY
EXPORTS
HGLib_MemoryCopy
HGLib_LoadImage
HGLib_GetImageData
HGLib_GetImageInfo
HGLib_GetImageDpi
HGLib_SaveImage
HGLib_ReleaseImage
HGLib_InitDevice

View File

@ -18,6 +18,17 @@ struct HGLibSaveImageParam_V1
};
#pragma pack(pop)
HGBool HGAPI HGLib_MemoryCopy(HGVoid *dest, const HGVoid *src, HGUInt size)
{
if (NULL == dest || NULL == src || 0 == size)
{
return HGFALSE;
}
memcpy(dest, src, size);
return HGTRUE;
}
HGLibImage HGAPI HGLib_LoadImage(const HGChar* filePath)
{
if (NULL == filePath)
@ -63,6 +74,17 @@ HGBool HGAPI HGLib_GetImageInfo(HGLibImage image, HGLibImageInfo* imageInfo)
return HGTRUE;
}
HGBool HGAPI HGLib_GetImageDpi(HGLibImage image, HGUInt *xDpi, HGUInt *yDpi)
{
if (NULL == image || NULL == xDpi || NULL == yDpi)
{
return HGFALSE;
}
HGBase_GetImageDpi((HGImage)image, xDpi, yDpi);
return HGTRUE;
}
HGBool HGAPI HGLib_SaveImage(HGLibImage image, const HGChar* savePath, const HGLibSaveImageParam* saveParam)
{
if (NULL == image || NULL == savePath)

View File

@ -509,6 +509,9 @@ typedef void (HGAPI *HGLibDeviceScanEventFunc)(HGLibDevice device, HGUInt event,
*/
typedef void (HGAPI *HGLibDeviceScanImageFunc)(HGLibDevice device, HGLibImage image, HGPointer param);
/* 内存拷贝 */
HGEXPORT HGBool HGAPI HGLib_MemoryCopy(HGVoid *dest, const HGVoid *src, HGUInt size);
/* 加载图像 */
HGEXPORT HGLibImage HGAPI HGLib_LoadImage(const HGChar *filePath);
@ -518,6 +521,9 @@ HGEXPORT HGByte* HGAPI HGLib_GetImageData(HGLibImage image);
/* 获取图像信息 */
HGEXPORT HGBool HGAPI HGLib_GetImageInfo(HGLibImage image, HGLibImageInfo* imageInfo);
/* 获取图像DPI */
HGEXPORT HGBool HGAPI HGLib_GetImageDpi(HGLibImage image, HGUInt *xDpi, HGUInt *yDpi);
/* 保存图像 */
HGEXPORT HGBool HGAPI HGLib_SaveImage(HGLibImage image, const HGChar* savePath, const HGLibSaveImageParam* saveParam);
@ -587,4 +593,4 @@ HGEXPORT HGBool HGAPI HGLib_StopDeviceScanAsyn(HGLibDevice device);
/* 获取设备操作码(在调用设备操作函数以后) */
HGEXPORT HGInt HGAPI HGLib_GetDeviceOperateCode(HGLibDevice device);
#endif /* __HGSCANNERLIB_H__ */
#endif /* __HGSCANNERLIB_H__ */

View File

@ -17,6 +17,7 @@ extern "C"
#include <curl/curl.h>
#include <list>
#include <algorithm>
#include "SockIoUser.h"
namespace ver_1
{
@ -154,10 +155,7 @@ namespace ver_1
HGBase_CreateLock(&m_lock);
m_devName.clear();
m_devHandle = NULL;
m_saneEvent = NULL;
m_saneParam = NULL;
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
m_user.clear();
m_scanInsertImgName.clear();
m_scanIsInsert = false;
@ -236,41 +234,29 @@ namespace ver_1
StopScan();
}
void ManagerV1::SetSaneEvent(SaneEvent event, void* param)
{
assert(NULL != event && NULL != param);
void ManagerV1::AddUser(class SockIoUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
m_user.push_back(user);
HGBase_LeaveLock(m_lock);
}
HGBase_EnterLock(m_lock);
m_saneEvent = event;
m_saneParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::SetSaneImageCallback(SaneImageCallback func, void* param)
{
assert(NULL != func && NULL != param);
HGBase_EnterLock(m_lock);
m_saneImageCallback = func;
m_saneImageParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::ResetSaneEvent()
{
HGBase_EnterLock(m_lock);
m_saneEvent = NULL;
m_saneParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::ResetSaneImageCallback()
{
HGBase_EnterLock(m_lock);
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::RemoveUser(class SockIoUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
std::list<class SockIoUser *>::iterator iter;
for (iter = m_user.begin(); iter != m_user.end(); ++iter)
{
if (*iter == user)
{
m_user.erase(iter);
break;
}
}
HGBase_LeaveLock(m_lock);
}
bool ManagerV1::Scan(const std::string& insertImgName, bool isInsert)
{
@ -1756,8 +1742,11 @@ namespace ver_1
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1779,8 +1768,11 @@ namespace ver_1
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_REMOVE, sane_dev->name, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_REMOVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1789,8 +1781,11 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_STATUS, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_STATUS, (const char*)data, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_STATUS, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1799,8 +1794,11 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_ERROR, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1809,8 +1807,11 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_WORKING, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_WORKING, (const char*)data, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_WORKING, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1896,8 +1897,11 @@ namespace ver_1
imgBase64 += GetBase64(img);
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneImageCallback)
p->m_saneImageCallback(imgName.c_str(), imgBase64.c_str(), p->m_saneImageParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneImageCallback(imgName.c_str(), imgBase64.c_str(), *iter);
}
HGBase_LeaveLock(p->m_lock);
HGBase_DestroyImage(img);
@ -1922,8 +1926,11 @@ namespace ver_1
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;

View File

@ -11,6 +11,7 @@
#include "Manager.h"
#include "Msg.h"
#include <string>
#include <list>
#include <vector>
namespace ver_1
@ -87,9 +88,6 @@ namespace ver_1
int format; // 上传格式 0: ofd 1: pdf 2: zip, 默认2
};
typedef void (*SaneEvent)(int code, const char* str, bool err, void* param);
typedef void (*SaneImageCallback)(const char* name, const char *base64, void* param);
class ManagerV1 : public Manager
{
public:
@ -103,12 +101,8 @@ namespace ver_1
// 扫描完成
void ScanFinish(const ScanFinishParam* param);
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);
void SetSaneImageCallback(SaneImageCallback func, void* param);
// 清理回调
void ResetSaneEvent();
void ResetSaneImageCallback();
void AddUser(class SockIoUser *user);
void RemoveUser(class SockIoUser *user);
// 扫描
bool Scan(const std::string& insertImgName, bool isInsert);
@ -189,14 +183,11 @@ namespace ver_1
std::string m_devName;
SANE_Handle m_devHandle;
DevParam m_devParam;
SaneEvent m_saneEvent;
void* m_saneParam;
SaneImageCallback m_saneImageCallback;
void* m_saneImageParam;
std::list<class SockIoUser *> m_user;
std::string m_scanInsertImgName;
bool m_scanIsInsert;
bool m_scanning;
HGEvent m_scanEvent;
};
}
}

View File

@ -22,6 +22,7 @@ extern "C"
#include <curl/curl.h>
#include <list>
#include <algorithm>
#include "WSUser.h"
namespace ver_2
{
@ -50,10 +51,7 @@ namespace ver_2
HGBase_StandardiseFileName(m_globalCfg.fileSavePath.c_str(), stdSavePath, 256);
m_globalCfg.fileSavePath = stdSavePath;
m_saneEvent = NULL;
m_saneParam = NULL;
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
m_user.clear();
m_initDevice = false;
m_devNameList.clear();
@ -207,41 +205,29 @@ namespace ver_2
}
}
void ManagerV2::SetSaneEvent(SaneEvent event, void* param)
{
assert(NULL != event && NULL != param);
void ManagerV2::AddUser(class WSUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
m_user.push_back(user);
HGBase_LeaveLock(m_lock);
}
HGBase_EnterLock(m_lock);
m_saneEvent = event;
m_saneParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::SetSaneImageCallback(SaneImageCallback func, void* param)
{
assert(NULL != func && NULL != param);
HGBase_EnterLock(m_lock);
m_saneImageCallback = func;
m_saneImageParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::ResetSaneEvent()
{
HGBase_EnterLock(m_lock);
m_saneEvent = NULL;
m_saneParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::ResetSaneImageCallback()
{
HGBase_EnterLock(m_lock);
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::RemoveUser(class WSUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
std::list<class WSUser *>::iterator iter;
for (iter = m_user.begin(); iter != m_user.end(); ++iter)
{
if (*iter == user)
{
m_user.erase(iter);
break;
}
}
HGBase_LeaveLock(m_lock);
}
int ManagerV2::SetGlobalConfig(const GlobalConfig& cfg, HGUInt mask, std::string& errInfo)
{
@ -4044,8 +4030,11 @@ namespace ver_2
HGBase_EnterLock(p->m_lock);
p->m_devNameList.push_back(sane_dev->name);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4075,8 +4064,11 @@ namespace ver_2
break;
}
}
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_REMOVE, sane_dev->name, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_REMOVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4085,8 +4077,11 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_WORKING, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_WORKING, (const char*)data, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_WORKING, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4108,8 +4103,11 @@ namespace ver_2
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4118,8 +4116,11 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_STATUS, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_STATUS, (const char*)data, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_STATUS, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4128,8 +4129,11 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_ERROR, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4182,8 +4186,11 @@ namespace ver_2
}
}
if (NULL != p->m_saneImageCallback)
p->m_saneImageCallback(imagePath.c_str(), blank ? true : false, p->m_saneImageParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneImageCallback(imagePath.c_str(), blank ? true : false, *iter);
}
}
HGBase_LeaveLock(p->m_lock);

View File

@ -111,9 +111,6 @@ namespace ver_2
std::string thumbBase64;
};
typedef void (*SaneEvent)(int code, const char *str, bool err, void* param);
typedef void (*SaneImageCallback)(const char* path, bool blank, void* param);
class ManagerV2 : public Manager
{
public:
@ -129,12 +126,8 @@ namespace ver_2
// 删除文件
void RemoveSavedFile(const RemoveSavedFileParam* param);
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);
void SetSaneImageCallback(SaneImageCallback func, void* param);
// 清理回调
void ResetSaneEvent();
void ResetSaneImageCallback();
void AddUser(class WSUser *user);
void RemoveUser(class WSUser *user);
// 设置全局配置
int SetGlobalConfig(const GlobalConfig& cfg, HGUInt mask, std::string &errInfo);
@ -304,10 +297,7 @@ namespace ver_2
private:
HGLock m_lock;
GlobalConfig m_globalCfg;
SaneEvent m_saneEvent;
void* m_saneParam;
SaneImageCallback m_saneImageCallback;
void* m_saneImageParam;
std::list<class WSUser *> m_user;
bool m_initDevice;
std::vector<std::string> m_devNameList;
@ -328,4 +318,4 @@ namespace ver_2
int m_bindNameBase;
std::list<std::string> m_saveFilePathList;
};
}
}

View File

@ -16,14 +16,12 @@ namespace ver_1
#endif
: WebUser(server, id, ip, port, sockConn)
{
GetManager()->SetSaneEvent(SaneEvent2, this);
GetManager()->SetSaneImageCallback(SaneImageCallback2, this);
GetManager()->AddUser(this);
}
SockIoUser::~SockIoUser()
{
GetManager()->ResetSaneImageCallback();
GetManager()->ResetSaneEvent();
GetManager()->RemoveUser(this);
}
ManagerV1* SockIoUser::GetManager()
@ -427,7 +425,7 @@ namespace ver_1
}
}
void SockIoUser::SaneEvent2(int code, const char* str, bool err, void* param)
void SockIoUser::SaneEvent(int code, const char* str, bool err, void* param)
{
SockIoUser* p = (SockIoUser*)param;
@ -464,7 +462,7 @@ namespace ver_1
}
}
void SockIoUser::SaneImageCallback2(const char* name, const char* base64, void* param)
void SockIoUser::SaneImageCallback(const char* name, const char* base64, void* param)
{
SockIoUser* p = (SockIoUser*)param;

View File

@ -24,12 +24,13 @@ namespace ver_1
void PostEventMsg(const HGByte* data, HGUInt dataSize);
virtual void ThreadFunc();
private:
static void SaneEvent2(int code, const char* str, bool err, void* param);
static void SaneImageCallback2(const char* name, const char *base64, void* param);
public:
static void SaneEvent(int code, const char* str, bool err, void* param);
static void SaneImageCallback(const char* name, const char *base64, void* param);
private:
static void GetMsgInfo(const SockIoCmdParam* param, std::string& user, std::string& data);
bool ShakeHand(const std::string& head);
void Pong();
bool SendResponse(const HGByte* data, HGUInt size, HGBool text);
};
}
}

View File

@ -202,16 +202,12 @@ namespace ver_2
m_startScanIsLocalSave = true;
m_startScanIsGetBase64 = false;
GetManager()->SetSaneEvent(SaneEvent2, this);
GetManager()->SetSaneImageCallback(SaneImageCallback2, this);
GetManager()->AddUser(this);
}
WSUser::~WSUser()
{
std::string errInfo;
GetManager()->DeinitDevice(errInfo);
GetManager()->ResetSaneImageCallback();
GetManager()->ResetSaneEvent();
GetManager()->RemoveUser(this);
}
ManagerV2* WSUser::GetManager()
@ -769,7 +765,7 @@ namespace ver_2
}
}
void WSUser::SaneEvent2(int code, const char* str, bool err, void* param)
void WSUser::SaneEvent(int code, const char* str, bool err, void* param)
{
WSUser* p = (WSUser*)param;
@ -897,7 +893,7 @@ namespace ver_2
}
}
void WSUser::SaneImageCallback2(const char* path, bool blank, void* param)
void WSUser::SaneImageCallback(const char* path, bool blank, void* param)
{
WSUser* p = (WSUser*)param;
@ -3612,4 +3608,4 @@ namespace ver_2
cJSON_Delete(retJson);
}
}
}
}

View File

@ -25,9 +25,10 @@ namespace ver_2
void PostEventMsg(const HGByte* data, HGUInt dataSize);
virtual void ThreadFunc();
private:
static void SaneEvent2(int code, const char* str, bool err, void* param);
static void SaneImageCallback2(const char* path, bool blank, void* param);
public:
static void SaneEvent(int code, const char* str, bool err, void* param);
static void SaneImageCallback(const char* path, bool blank, void* param);
private:
bool ShakeHand(const std::string& head);
void Pong();
bool SendResponse(const HGByte* data, HGUInt size, HGBool text);