code_app/sdk/webservice/ManagerV2.h

201 lines
5.6 KiB
C
Raw Normal View History

#pragma once
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGLock.h"
#include "base/HGImage.h"
#include "base/HGMsgPump.h"
#include "sane/sane_ex.h"
#include "sane/sane_option_definitions.h"
#include "Manager.h"
#include "Msg.h"
#include <string>
#include <vector>
namespace ver_2
{
enum
{
SANEEVENT_ARRIVE = 1L,
SANEEVENT_REMOVE,
SANEEVENT_STATUS,
SANEEVENT_WORKING,
SANEEVENT_FINISH,
SANEEVENT_ERROR
};
struct GlobalConfig
{
GlobalConfig()
{
imageJpegQuality = 0;
imageTiffJpegQuality = 0;
uploadHttpPort = 0;
uploadFtpPort = 0;
}
// 文件保存
std::string fileSavePath;
std::string fileNamePrefix;
std::string fileNameMode;
// 图像保存
std::string imageFormat;
int imageJpegQuality;
std::string imageTiffCompression;
int imageTiffJpegQuality;
// 上传
std::string uploadHttpHost;
unsigned short uploadHttpPort;
std::string uploadHttpPath;
std::string uploadFtpUser;
std::string uploadFtpPassword;
std::string uploadFtpHost;
unsigned short uploadFtpPort;
};
struct DeviceParam
{
DeviceParam()
{
Reset();
}
void Reset()
{
}
// 颜色模式
std::vector<std::string> colorModeList;
std::string colorMode;
// 扫描页面
std::vector<std::string> pageModeList;
std::string pageMode;
// 分辨率
std::vector<int> resolutionList;
int resolution;
// 亮度
int brightnessMin;
int brightnessMax;
int brightness;
// 对比度
int contrastMin;
int contrastMax;
int contrast;
// 伽马
int gammaMin;
int gammaMax;
int gamma;
// 纸张尺寸
std::vector<std::string> paperSizeList;
std::string pageSize;
int paperSizeWidth;
int paperSizeHeight;
// 手动裁剪
bool paperCutEnabled;
float paperCutLeft;
float paperCutTop;
float paperCutRight;
float paperCutBottom;
// 是否纠偏
bool autoCrop;
};
typedef void (*SaneEvent)(int code, const char *str, bool err, void* param);
typedef void (*SaneImageCallback)(const char* path, void* param);
class ManagerV2 : public Manager
{
public:
ManagerV2(HGMsgPump msgPump);
virtual ~ManagerV2();
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);
void SetSaneImageCallback(SaneImageCallback func, void* param);
// 清理回调
void ResetSaneEvent();
void ResetSaneImageCallback();
// 扫描完成
void ScanFinish(const ScanFinishParam* param);
// 设置全局配置
int SetGlobalConfig(const GlobalConfig& cfg);
// 获取全局配置
int GetGlobalConfig(GlobalConfig& cfg);
// 加载本地图像
int LoadLocalImage(const std::string& imagePath, std::string& imgBase64);
// 保存本地图像
int SaveLocalImage(const std::string& imgBase64, std::string& imagePath);
// 删除本地文件
int DeleteLocalFile(const std::string& filePath);
// 清理全局文件保存目录
int ClearGlobalFileSavePath();
// 合成本地图像
int MergeLocalImage(const std::vector<std::string>& imagePathList, const std::string& mode,
const std::string& align, int interval, std::string& outImagePath);
// 本地合成多张图像
int LocalMakeMultiImage(const std::vector<std::string>& imagePathList, const std::string& format,
const std::string& tiffCompression, int tiffJpegQuality, std::string& outImagePath);
// 拆分本地图像
int SplitLocalImage(const std::string& imagePath, const std::string& mode, int location,
std::vector<std::string>& outImagePathList);
// 本地生成压缩文件
int LocalMakeZipFile(const std::vector<std::string>& filePathList, std::string& outZipPath);
// 本地图像纠偏
int LocalImageDeskew(const std::string& imagePath, std::string& outImagePath);
// 上传文件
int UploadLocalFile(const std::string& filePath, const std::string& mode, const std::string& remoteFilePath);
// 设备初始化
int InitDevice();
// 设备反初始化
int DeinitDevice();
// 获取设备列表
int GetDeviceNameList(std::vector<std::string> &deviceNameList);
// 打开设备
int OpenDevice(const std::string& deviceName);
// 关闭设备
int CloseDevice();
// 设置设备参数
int SetDeviceParam(const DeviceParam& param);
// 获取设备参数
int GetDeviceParam(DeviceParam& param);
// 获取当前设备名
int GetCurrDeviceName(std::string& deviceName);
// 开始扫描
int StartScan();
// 停止扫描
int StopScan();
private:
static std::string GetCfgStringValue(const std::string& app, const std::string& key, const std::string& def);
static int GetCfgIntValue(const std::string& app, const std::string& key, int def);
static bool GetCfgBoolValue(const std::string& app, const std::string& key, bool def);
static bool SetCfgStringValue(const std::string& app, const std::string& key, const std::string& val);
static bool SetCfgIntValue(const std::string& app, const std::string& key, int val);
static bool SetCfgBoolValue(const std::string& app, const std::string& key, bool val);
static int LoadBase64(const std::string& fileName, std::string& base64);
static int SaveBase64(const std::string& base64, const std::string& fileName);
std::string GetFilePath(const std::string& suffix);
std::string GetImagePath();
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
private:
HGLock m_lock;
GlobalConfig m_globalCfg;
std::vector<std::string> m_saveFilePathList;
SaneEvent m_saneEvent;
void* m_saneParam;
SaneImageCallback m_saneImageCallback;
void* m_saneImageParam;
bool m_initDevice;
std::vector<std::string> m_devNameList;
bool m_openDevice;
SANE_Handle m_devHandle;
std::string m_devName;
DeviceParam m_devParam;
bool m_scanning;
};
}