code_app/test/scannerlib/hanvon/main.cpp

176 lines
7.4 KiB
C++

#include <iostream>
#include <sstream>
#include <stdlib.h>
#include <thread>
#include "HGScannerLib.h"
#define DELEAY_MS(x) std::this_thread::sleep_for(std::chrono::milliseconds((x)))
using namespace std;
//有图事件回调
static void HGAPI 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 HGAPI 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 HGAPI 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 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;
HGLibDeviceParamGroup *groups = HGLib_GetDeviceParamGroupList(dev, &grpCount);
if (groups)
{
//获取sdk支持的功能项及配置项内容
for (size_t i = 0; i < grpCount; i++)
{
cout << "group: " << groups[i].group << endl;
for (size_t j = 0; j < groups[i].paramCount; j++)
{
cout << " option: " << groups[i].param[j].option
<< " type: " << groups[i].param[j].type << endl;
switch (groups[i].param[j].rangeType)
{
case HGLIB_OPTION_VALUERANGETYPE_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_OPTION_VALUERANGETYPE_ENUMLIST:
for (size_t k = 0; k < groups[i].param[j].enumValueList.count; k++)
{
cout<<"support value["<<k<<"]="<<groups[i].param[j].enumValueList.value[k]<<endl;
}
break;
case HGLIB_OPTION_VALUERANGETYPE_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_OPTION_VALUERANGETYPE_INTRANGE:
cout<<"support value range min = "<<groups[i].param[j].intValueRange.minValue <<" max = "<<groups[i].param[j].intValueRange.maxValue<<endl;
break;
case HGLIB_OPTION_VALUERANGETYPE_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].type)
{
case HGLIB_OPTION_VALUETYPE_INT:
cout << " intValue: " << groups[i].param[j].intValue << endl;
break;
case HGLIB_OPTION_VALUETYPE_ENUM:
cout << " enumValue: " << groups[i].param[j].enumValue << endl;
break;
case HGLIB_OPTION_VALUETYPE_DOUBLE:
cout << " doubleValue: " << groups[i].param[j].doubleValue << endl;
break;
case HGLIB_OPTION_VALUETYPE_BOOL:
cout << " boolValue: " << groups[i].param[j].boolValue << endl;
break;
default:
cout << "unkownun type" << endl;
break;
}
}
}
}
HGInt intValue;
HGUInt enumValue;
HGDouble doubleValue;
HGBool boolValue;
//设置颜色模式
enumValue = HGLIB_OPTION_ENUMVALUE_YSMS_HB;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_YSMS,&enumValue);
//设置分辨率
intValue = 300;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_FBL,&intValue);
//设置单双面或跳过空白页
enumValue = HGLIB_OPTION_ENUMVALUE_SMYM_DM;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_SMYM,&enumValue);
//设置纸张尺寸 A3 A4 或匹配原始尺寸
enumValue = HGLIB_OPTION_ENUMVALUE_ZZCC_PPYSCC;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_ZZCC,&enumValue);
//设置旋转 90° 180° 270°
enumValue = HGLIB_OPTION_ENUMVALUE_WGFX_90;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_WGFX,&enumValue);
// 扫描指定张数
enumValue = HGLIB_OPTION_ENUMVALUE_SMZS_SMZDZS;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_SMZS,&enumValue);
intValue = 1;
HGLib_SetDeviceParam(dev,HGLIB_OPTION_NAME_SMSL,&intValue);
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 Scanner SDK Demo *********" << endl;
return 0;
}