code_app/test/scannerlib/main.cpp

193 lines
8.3 KiB
C++

#include <iostream>
#include <sstream>
#include <stdlib.h>
#include <thread>
#include "HGScannerLib.h"
#include "sane_option_definitions.h"
#define DELEAY_MS(x) std::this_thread::sleep_for(std::chrono::milliseconds((x)))
using namespace std;
//有图事件回调
static void DeviceScanImageFunc(HGLibDevice device, HGLibImage image, HGPointer param)
{
static int indeximg = 0;
string savepath = std::to_string(++indeximg) + ".jpg";
cout << "save image : " << savepath << endl;
auto ret = HGLib_SaveImage(image, savepath.c_str(), 0);
cout << "save image : " << savepath << (ret ? " success" : " failed") << endl;
}
//设备热拔插事件回调
static void DeviceHotPlugEvent(HGUInt event, const HGChar *deviceName, HGPointer param)
{
cout << "Devices : " << deviceName << " DeviceHotPlugEvent : " << (event == HGLIB_DEVHOTPLUG_EVENT_ARRIVE ? "HGLIB_DEVHOTPLUG_EVENT_ARRIVE " : "HGLIB_DEVHOTPLUG_EVENT_LEFT") << endl;
}
//扫描状态事件回调
static void DeviceScanEvent(HGLibDevice device, HGUInt event, HGBool err, const HGChar *info, HGPointer param)
{
switch (event)
{
case HGLIB_DEVSCAN_EVENT_BEGIN:
cout << "DeviceScanEvent Start Scan" << endl;
break;
case HGLIB_DEVSCAN_EVENT_END:
cout << "DeviceScanEvent Scan stopped" << endl;
break;
case HGLIB_DEVSCAN_EVENT_INFO:
cout << "DeviceScanEvent info : " << info << endl;
break;
default:
cout << "Unkownun DeviceScanEvent " << event << endl;
break;
}
}
int main(unsigned char argc, unsigned char *argv[])
{
std::cout << "*********Enter LSC Scanner SDK Demo *********" << std::endl;
HGLib_InitDevice(DeviceHotPlugEvent, 0); //初始化调用模块
DELEAY_MS(5000);
HGChar **devNameList = HGLib_GetDeviceNameList(); //获取已连接的设备列表,已字符数组的形式返回
if (devNameList)
{
HGLibDevice dev = HGLib_OpenDevice(devNameList[0]); //此示例代码中调用设备列表中第一个设备
if (dev)
{
HGUInt grpCount = 0;
HGLibDeviceGetParamGroup *groups = HGLib_GetDeviceParamGroupList(dev, &grpCount);
if (groups)
{
//获取sdk支持的功能项及配置项内容
for (size_t i = 0; i < grpCount; i++)
{
cout << groups[i].groupName << endl;
for (size_t j = 0; j < groups[i].paramCount; j++)
{
cout << " title: " << groups[i].param[j].param.title
<< " type: " << groups[i].param[j].param.type << endl;
switch (groups[i].param[j].rangeType)
{
case HGLIB_DEVPARAM_RANGETYPE_INTLIST:
for (size_t k = 0; k < groups[i].param[j].intValueList.count; k++)
{
cout<<"support value["<<k<<"]="<<groups[i].param[j].intValueList.value[k]<<endl;
}
break;
case HGLIB_DEVPARAM_RANGETYPE_STRINGLIST:
for (size_t k = 0; k < groups[i].param[j].stringValueList.count; k++)
{
cout<<"support value["<<k<<"]="<<groups[i].param[j].stringValueList.value[k]<<endl;
}
break;
case HGLIB_DEVPARAM_RANGETYPE_DOUBLELIST:
for (size_t k = 0; k < groups[i].param[j].doubleValueList.count; k++)
{
cout<<"support value["<<k<<"]="<<groups[i].param[j].doubleValueList.value[k]<<endl;
}
break;
case HGLIB_DEVPARAM_RANGETYPE_INTRANGE:
cout<<"support value range min = "<<groups[i].param[j].intValueRange.minValue <<" max = "<<groups[i].param[j].intValueRange.maxValue<<endl;
break;
case HGLIB_DEVPARAM_RANGETYPE_DOUBLERANGE:
cout<<"support value range min = "<<groups[i].param[j].intValueRange.minValue <<" max = "<<groups[i].param[j].intValueRange.maxValue<<endl;
break;
default:
break;
}
switch (groups[i].param[j].param.type)
{
case HGLIB_DEVPARAM_TYPE_INT:
cout << " intValue: " << groups[i].param[j].param.intValue << endl;
break;
case HGLIB_DEVPARAM_TYPE_STRING:
cout << " stringValue: " << groups[i].param[j].param.stringValue << endl;
break;
case HGLIB_DEVPARAM_TYPE_DOUBLE:
cout << " doubleValue: " << groups[i].param[j].param.doubleValue << endl;
break;
case HGLIB_DEVPARAM_TYPE_BOOL:
cout << " boolValue: " << groups[i].param[j].param.boolValue << endl;
break;
default:
cout << "unkownun type" << endl;
break;
}
}
}
}
//设置颜色模式
HGLibDeviceSetParam setparam;
setparam.title = OPTION_TITLE_YSMS;
setparam.type = HGLIB_DEVPARAM_TYPE_STRING;
setparam.stringValue = OPTION_VALUE_YSMS_HB;
HGLib_SetDeviceParam(dev,&setparam,1);
//设置分辨率
setparam.title = OPTION_TITLE_FBL;
setparam.type = HGLIB_DEVPARAM_TYPE_INT;
setparam.intValue = 300;
HGLib_SetDeviceParam(dev,&setparam,1);
//设置单双面或跳过空白页
setparam.title = OPTION_TITLE_SMYM;
setparam.type = HGLIB_DEVPARAM_TYPE_STRING;
setparam.stringValue = OPTION_VALUE_SMYM_DM;
HGLib_SetDeviceParam(dev,&setparam,1);
//设置纸张尺寸 A3 A4 或匹配原始尺寸
setparam.title = OPTION_TITLE_ZZCC;
setparam.type = HGLIB_DEVPARAM_TYPE_STRING;
setparam.stringValue = OPTION_VALUE_ZZCC_PPYSCC;//匹配原始尺寸
//设置旋转 90° 180° 270°
setparam.title = OPTION_TITLE_WGFX;
setparam.type = HGLIB_DEVPARAM_TYPE_STRING;
setparam.stringValue = OPTION_VALUE_WGFX_90;
HGLib_SetDeviceParam(dev,&setparam,1);
// //设置扫描张数 -1: 连续扫描 其他:>0 指定数量扫描
// setparam.title = OPTION_TITLE_SMZS;
// setparam.type = HGLIB_DEVPARAM_TYPE_STRING;
// setparam.stringValue = OPTION_VALUE_SMZS_LXSM;//连续扫描
// HGLib_SetDeviceParam(dev,&setparam,1);
setparam.title = OPTION_TITLE_SMZS;
setparam.type = HGLIB_DEVPARAM_TYPE_STRING;
setparam.stringValue = OPTION_VALUE_SMZS_SMZDZS;//指定张数扫描
HGLib_SetDeviceParam(dev,&setparam,1);
setparam.title = OPTION_TITLE_SMSL;
setparam.type = HGLIB_DEVPARAM_TYPE_INT;
setparam.intValue = 1;//扫描张数
HGLib_SetDeviceParam(dev,&setparam,1);
if (HGLib_StartDeviceScan(dev, DeviceScanEvent, 0, DeviceScanImageFunc, 0)) //开始启动扫描并注册扫描事件以及图像回调
{
DELEAY_MS(10000); //实际走纸延时等待处理
HGLib_StopDeviceScan(dev);
}
HGBool ret = HGLib_ReleaseDeviceParamGroupList(groups,grpCount);
if(!ret)
cout << "HGLib_ReleaseDeviceParamGroupList failed"<<endl;
HGLib_CloseDevice(dev); //关闭当前打开的设备
}
else
cout << "Open device : " << devNameList[0] << "failed " << endl;
HGLib_ReleaseDeviceNameList(devNameList); //释放设备列表
}
else
cout << "devices not found" << endl;
HGLib_DeinitDevice(); //退出扫描模块
cout << "*********Exit LSC Scanner SDK Demo *********" << endl;
return 0;
}