增加得力动态库sdk

This commit is contained in:
yangjiaxuan 2024-07-18 15:23:24 +08:00
parent 266bc1eda8
commit 13545c0384
16 changed files with 1132 additions and 1 deletions

13
kylin/dlso/DEBIAN/control Normal file
View File

@ -0,0 +1,13 @@
Package: deliscansdk
Version: 4.3001.2022.05251
Architecture: amd64
Section: utils
Priority: optional
Maintainer: pengming
Installed-Size: 35948
Replaces: deliscan
Conflicts:
Description:deliscan scanner app and sane-driver.
no extended description.
Depends: libc6 (>=2.0.0)

View File

@ -0,0 +1,5 @@
#!/bin/bash
udevadm control --reload-rules
udevadm trigger
ldconfig

View File

@ -0,0 +1 @@
/opt/deliscansdk/lib

View File

@ -0,0 +1,74 @@
# Load firmware for this printer.
#ACTION!="add", GOTO="mud_rules_end"
#HuaGao --->G100~G400
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0100", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0200", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0300", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0400", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0139", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0239", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0339", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0439", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0402", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0303", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0302", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="064b", ATTR{idProduct}=="7823", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3072", ATTR{idProduct}=="0306", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
#Lanxum --->G100~G400
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8620", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8730", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8420", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8520", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8200", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8629", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8739", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8429", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8529", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8630", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8426", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="31c9", ATTR{idProduct}=="8626", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
#Hanvon --->G100~G400
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="7000", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="7039", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="1000", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="8000", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="9000", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="1002", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2903", ATTR{idProduct}=="7002", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
#cts --->G100~G400
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3308", ATTR{idProduct}=="6006", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3308", ATTR{idProduct}=="6005", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3308", ATTR{idProduct}=="6007", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="3308", ATTR{idProduct}=="6008", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
#microtek
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="05da", ATTR{idProduct}=="9220", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="05da", ATTR{idProduct}=="9222", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="05da", ATTR{idProduct}=="9223", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
#unis
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="32ec", ATTR{idProduct}=="0200", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="32ec", ATTR{idProduct}=="0210", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="32ec", ATTR{idProduct}=="0201", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
#Deli --->G100~G400
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="401c", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="401d", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="401e", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="401f", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4020", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4021", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4022", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4015", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4016", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4017", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4018", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="4019", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="401a", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="300e", ATTR{idProduct}=="401b", MODE="0666", OWNER="root", GROUP="lp", ENV{libsane_matched}="yes"
LABEL="mud_rules_end"

View File

@ -0,0 +1,6 @@
1. demo 文件夹中所使用的的编译规则以及python demo暂均基于amd架构国产系统使用若想在arm架构下使用python请更换相关动态库或调整cmakelist文件
注:
demo中均在银河麒麟以及UOS系统下测试过同时银河麒麟下使用python3.5UOS下使用python版本为python 3.7,请悉知

View File

@ -0,0 +1,14 @@
project(testdemo)
add_compile_options(-std=c++11)
FILE(GLOB SRC "*.cpp" "*.h" "*.c")
include_directories(${PROJECT_SOURCE_DIR}/../../include)
add_executable(${PROJECT_NAME} ${SRC})
#for ARM
link_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/../lib/)
target_link_libraries(${PROJECT_NAME} HGBase hgdriver HGImgFmt HGImgProc HGScannerLib mupdf pdf sane-hgsane)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../../bin)

View File

@ -0,0 +1,176 @@
#include <iostream>
#include <sstream>
#include <stdlib.h>
#include <thread>
#include "HGScannerLib.h"
#include <string>
#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 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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

View File

@ -0,0 +1,4 @@
#!/bin/bash
DIR="$( cd "$( dirname "$0" )" && pwd )"
export LD_LIBRARY_PATH=$DIR
python3.7 test.py

View File

@ -0,0 +1,224 @@
import ctypes
import os
from os import system
import time
import platform
from ctypes import *
import random
class HGLibSaveImageParam(Structure):
_fields_ = [ ("size", c_uint),
("jpegQuality", c_uint),
("tiffCompression", c_uint),
("tiffJpegQuality", c_uint),
("ocr", c_int)]
class HGLibDeviceIntValueList(Structure):
_fields_ = [ ("value", POINTER(c_int)),
("count", c_uint)]
class HGLibDeviceEnumValueList(Structure):
_fields_ = [ ("value", POINTER(c_uint)),
("count", c_uint)]
class HGLibDeviceDoubleValueList(Structure):
_fields_ = [ ("value", POINTER(c_double)),
("count", c_uint)]
class HGLibDeviceIntValueRange(Structure):
_fields_ = [ ("minValue", c_int),
("maxValue", c_int)]
class HGLibDeviceDoubleValueRange(Structure):
_fields_ = [ ("minValue", c_double),
("maxValue", c_double)]
class HGLibDeviceParamType(Union):
_fields_ = [ ("intValue", c_int),
("enumValue", c_uint),
("doubleValue", c_double),
("boolValue", c_int)]
class HGLibDeviceParamRangeType(Union):
_fields_ = [ ("intValueList", HGLibDeviceIntValueList),
("enumValueList", HGLibDeviceEnumValueList),
("doubleValueList", HGLibDeviceDoubleValueList),
("intValueRange", HGLibDeviceIntValueRange),
("doubleValueRange", HGLibDeviceDoubleValueRange)]
class HGLibDeviceParam(Structure):
_fields_ = [ ("option", c_uint),
("type", c_uint),
("typeValue", HGLibDeviceParamType),
("rangeType", c_uint),
("rangeTypeValue", HGLibDeviceParamRangeType)]
class HGLibDeviceParamGroup(Structure):
_fields_ = [ ("group", c_uint),
("param", POINTER(HGLibDeviceParam)),
("paramCount", c_uint)]
print(os.path.abspath('.'))
#加载动态库 所有依赖库必须在同一运行目录下边
if platform.system() == 'Windows':
Objdll = ctypes.WinDLL(os.path.abspath('.') + "/HGScannerLib.dll")
elif platform.system() == "Linux":
Objdll = cdll.LoadLibrary(os.path.abspath('.') + "/libHGScannerLib.so")
#加载图像接口示例
HGLib_LoadImage = Objdll.HGLib_LoadImage
HGLib_LoadImage.argtypes = [ctypes.c_char_p]
HGLib_LoadImage.restype = ctypes.c_void_p
Image = HGLib_LoadImage(c_char_p(b"1.jpg"))
#保存图像接口示例
HGLib_SaveImage = Objdll.HGLib_SaveImage
HGLib_SaveImage.argtypes = [ctypes.c_void_p, ctypes.c_char_p, POINTER(HGLibSaveImageParam)]
HGLib_SaveImage.restype = ctypes.c_int
ImageParam = HGLibSaveImageParam()
ImageParam.size = 20
ImageParam.jpegQuality = 100
ImageParam.tiffCompression = 0
ImageParam.tiffJpegQuality = 0
ImageParam.ocr = 0
Ret = HGLib_SaveImage(Image, c_char_p(b"2.jpg"), pointer(ImageParam))
#释放图像资源
HGLib_ReleaseImage = Objdll.HGLib_ReleaseImage
HGLib_ReleaseImage.argtypes = [ctypes.c_void_p]
HGLib_ReleaseImage.restype = ctypes.c_int
Ret = HGLib_ReleaseImage(Image)
#设备热拔插回调事件
def HGLibDeviceHotPlugEventFunc(event: c_uint, deviceName: c_char_p, param: c_void_p):
print(deviceName)
return
#初始化操作
FuncType = CFUNCTYPE(None, c_uint, c_char_p, c_void_p)
cb = FuncType(HGLibDeviceHotPlugEventFunc)
HGLib_InitDevice = Objdll.HGLib_InitDevice
HGLib_InitDevice.argtypes = [FuncType, c_void_p]
HGLib_InitDevice.restype = ctypes.c_int
Ret = HGLib_InitDevice(cb, 0)
time.sleep(1)
#获取设备列表
HGLib_GetDeviceNameList = Objdll.HGLib_GetDeviceNameList
HGLib_GetDeviceNameList.argtypes = []
HGLib_GetDeviceNameList.restype = POINTER(ctypes.c_char_p)
DeviceNameList = HGLib_GetDeviceNameList()
#打开指定设备
HGLib_OpenDevice = Objdll.HGLib_OpenDevice
HGLib_OpenDevice.argtypes = [ctypes.c_char_p]
HGLib_OpenDevice.restype = ctypes.c_void_p
Device = HGLib_OpenDevice(DeviceNameList[0])
#获取设备所有参数
HGLib_GetDeviceParamGroupList = Objdll.HGLib_GetDeviceParamGroupList
HGLib_GetDeviceParamGroupList.argtypes = [ctypes.c_void_p, POINTER(c_uint)]
HGLib_GetDeviceParamGroupList.restype = POINTER(HGLibDeviceParamGroup)
DevParamCount = ctypes.c_uint()
DevParamGroup = HGLib_GetDeviceParamGroupList(Device, pointer(DevParamCount))
GroupList = ['None', 'BaseSetting', 'Brightness', 'ImageProc', 'PaperFeeding']
ValueTypeList = ['None', 'Int', 'Enum', 'Double', 'Bool']
ValueRangeTypeList = ['None', 'IntList', 'EnumList', 'DoubleList', 'IntRange', 'DoubleRange']
i = 0
while i < int(DevParamCount.value):
print("group" + str(i) + ":" + GroupList[DevParamGroup[i].group])
print(" paramCount:" + str(DevParamGroup[i].paramCount))
j = 0
while (j < int(DevParamGroup[i].paramCount)):
print(" paramOption:" + str(DevParamGroup[i].param[j].option))
print(" paramValueType:" + ValueTypeList[DevParamGroup[i].param[j].type])
print(" paramValueRangeType:" + ValueRangeTypeList[DevParamGroup[i].param[j].rangeType])
j += 1
i += 1
#销毁
HGLib_ReleaseDeviceParamGroupList = Objdll.HGLib_ReleaseDeviceParamGroupList
HGLib_ReleaseDeviceParamGroupList.argtypes = [POINTER(HGLibDeviceParamGroup), c_uint]
HGLib_ReleaseDeviceParamGroupList.restype = ctypes.c_int
Ret = HGLib_ReleaseDeviceParamGroupList(DevParamGroup, DevParamCount)
#设置扫描参数
HGLib_SetDeviceParam = Objdll.HGLib_SetDeviceParam
HGLib_SetDeviceParam.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_void_p]
HGLib_SetDeviceParam.restype = ctypes.c_int
DevParam = ctypes.c_int(1) #HGLIB_OPTION_ENUMVALUE_DLSCLX_W -> 不进行多流输出类型
Ret = HGLib_SetDeviceParam(Device, 1, byref(DevParam)) #见HGLib_SetDeviceParam 头文件接口说明 1 -> HGLIB_OPTION_NAME_DLSC 多流输出
#扫描事件回调
def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: c_char_p, param: c_void_p):
s_info=info
global bStop
print("event code",event," event info:",s_info)
if event == 2:#HGLIB_DEVSCAN_EVENT_END 扫描停止
bStop=True
print("bStop true")
elif event == 1:
bStop=False
print("bStop false")
return
imgindex=0
#扫描图像事件回调
def HGLibDeviceScanImageFunc(device: c_void_p, image: c_void_p, param: c_void_p):
global imgindex
ImageParam = HGLibSaveImageParam()
ImageParam.size = 20
ImageParam.jpegQuality = 100
ImageParam.tiffCompression = 0
ImageParam.tiffJpegQuality = 0
ImageParam.ocr = 0
print("image call back!!")
imgindex+=1
t_index=imgindex
imgname=str(t_index) + '_scanned.jpg'
print(imgname)
b_imagename=imgname.encode('utf-8')
pchar=c_char_p(b_imagename)
Ret = HGLib_SaveImage(image, pchar, pointer(ImageParam))
return
#注册扫描相关事件并启动扫描
FuncType1 = CFUNCTYPE(None, c_void_p, c_uint, c_int, c_char_p, c_void_p)
cb1 = FuncType1(HGLibDeviceScanEventFunc)
FuncType2 = CFUNCTYPE(None, c_void_p, c_void_p, c_void_p)
cb2 = FuncType2(HGLibDeviceScanImageFunc)
HGLib_StartDeviceScan = Objdll.HGLib_StartDeviceScan
HGLib_StartDeviceScan.argtypes = [c_void_p, FuncType1, c_void_p, FuncType2, c_void_p]
HGLib_StartDeviceScan.restyped = ctypes.c_int
print("start scan")
Ret = HGLib_StartDeviceScan(Device, cb1, 0, cb2, 0)
#模拟扫描持续应等待扫描事件回调返回扫描停止才结束本次扫描流程
while(not bStop):
time.sleep(1)
print("scanning...")
print("scan done!!!")
#关闭当前打开的设备
HGLib_CloseDevice=Objdll.HGLib_CloseDevice
HGLib_CloseDevice.argtypes = [c_void_p]
HGLib_CloseDevice.restype = ctypes.c_int
HGLib_CloseDevice(Device)
print("Close Devices")
#释放设备列表资源
HGLib_ReleaseDeviceNameList=Objdll.HGLib_ReleaseDeviceNameList
HGLib_ReleaseDeviceNameList.argtypes=[POINTER(ctypes.c_char_p)]
HGLib_ReleaseDeviceNameList.restype = ctypes.c_int
HGLib_ReleaseDeviceNameList(DeviceNameList)
print("ReleaseDeviceNameList done")
print("exit test")

Binary file not shown.

View File

@ -0,0 +1,141 @@
#ifndef __HGDEF_H__
#define __HGDEF_H__
/****************************************************************************
* Platform Dependent Definitions and Typedefs *
****************************************************************************/
/* Microsoft C/C++ Compiler */
#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) || defined (_WINDOWS)
#define HG_CMP_MSC
#if defined(_WIN64) || defined(WIN64)
#define HG_64BIT
#elif defined(_WIN32) || defined(WIN32)
#define HG_32BIT
#endif
/* Apple Compiler (which is GNU now) */
#elif defined(__APPLE__)
#define HG_CMP_XCODE
#define HG_64BIT
/* GNU C/C++ Compiler */
#elif defined(__GNUC__)
#define HG_CMP_GNU
#if defined(__alpha__) || defined(__ia64__) || defined(__ppc64__) || defined(__s390x__) || defined(__x86_64__)
#define HG_64BIT
#else
#define HG_32BIT
#endif
/* Unrecognized */
#else
#error Unrecognized compiler
#endif
#if defined(HG_CMP_MSC)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#endif
/* type defines */
typedef void HGVoid;
typedef char HGChar;
typedef unsigned char HGByte;
typedef short HGShort;
typedef unsigned short HGUShort;
typedef int HGInt;
typedef unsigned int HGUInt;
typedef long long HGLonglong;
typedef unsigned long long HGULonglong;
typedef void* HGPointer;
typedef HGInt HGBool;
typedef float HGFloat;
typedef double HGDouble;
#ifdef HG_64BIT
typedef HGLonglong HGSize;
typedef HGULonglong HGUSize;
#else
typedef HGInt HGSize;
typedef HGUInt HGUSize;
#endif
typedef HGUInt HGColor;
#define HG_MAKECOLOR(r, g, b, a) (HGColor)(((HGUInt)a << 24) | ((HGUInt)b << 16) | ((HGUInt)g << 8) | (HGUInt)r)
#define HG_GETCOLOR_R(color) (HGUInt)((HGColor)color & 0xFF)
#define HG_GETCOLOR_G(color) (HGUInt)(((HGColor)color >> 8) & 0xFF)
#define HG_GETCOLOR_B(color) (HGUInt)(((HGColor)color >> 16) & 0xFF)
#define HG_GETCOLOR_A(color) (HGUInt)(((HGColor)color >> 24) & 0xFF)
/* error code */
typedef HGUInt HGResult;
#define HGTRUE 1
#define HGFALSE 0
#ifndef HGMAX
#define HGMAX(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef HGMIN
#define HGMIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
#if defined(HG_CMP_MSC)
#ifdef __cplusplus
#define HGEXPORT extern "C"
#else
#define HGEXPORT
#endif /* __cplusplus */
#define HGAPI __stdcall
#define HGAPIV __cdecl
#else
#ifdef __cplusplus
#define HGEXPORT extern "C" __attribute ((visibility("default")))
#else
#define HGEXPORT __attribute ((visibility("default")))
#endif /* __cplusplus */
#define HGAPI
#define HGAPIV
#endif
#define HG_DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
typedef struct
{
HGInt left;
HGInt top;
HGInt right;
HGInt bottom;
}HGRect;
typedef struct
{
HGFloat left;
HGFloat top;
HGFloat right;
HGFloat bottom;
}HGRectF;
typedef struct
{
HGInt x;
HGInt y;
}HGPoint;
typedef struct
{
HGFloat x;
HGFloat y;
}HGPointF;
#endif /* __HGDEF_H__ */

View File

@ -0,0 +1,473 @@
#ifndef __HGSCANNERLIB_H__
#define __HGSCANNERLIB_H__
#include "HGDef.h"
HG_DECLARE_HANDLE(HGLibImage);
HG_DECLARE_HANDLE(HGLibDevice);
/* TIFF压缩方式 */
#define HGLIB_TIFFCOMPRESSION_NONE 1L
#define HGLIB_TIFFCOMPRESSION_CCITTFAX4 2L
#define HGLIB_TIFFCOMPRESSION_LZW 3L
#define HGLIB_TIFFCOMPRESSION_JPEG 4L
/* 设备热拔插事件 */
#define HGLIB_DEVHOTPLUG_EVENT_ARRIVE 1L
#define HGLIB_DEVHOTPLUG_EVENT_REMOVE 2L
/* 设备扫描事件 */
#define HGLIB_DEVSCAN_EVENT_BEGIN 1L
#define HGLIB_DEVSCAN_EVENT_END 2L
#define HGLIB_DEVSCAN_EVENT_INFO 3L
/* 组名 */
// 基本设置
#define HGLIB_GROUP_NAME_BASESETTING 1L
// 亮度
#define HGLIB_GROUP_NAME_BRIGHTNESS 2L
// 图像处理
#define HGLIB_GROUP_NAME_IMAGEPROCESS 3L
// 送纸方式设置
#define HGLIB_GROUP_NAME_PAPERFEEDING 4L
/* 配置名 */
#define HGLIB_OPTION_NAME_UNKNOWN 0L
// "多流输出"
#define HGLIB_OPTION_NAME_DLSC 1L
// "多流输出类型"
#define HGLIB_OPTION_NAME_DLSCLX 2L
// "颜色模式"
#define HGLIB_OPTION_NAME_YSMS 3L
// "黑白图像阈值"
#define HGLIB_OPTION_NAME_HBTXYZ 4L
// "灰度或黑白图像 - 除色"
#define HGLIB_OPTION_NAME_HDHHBTX_CS 5L
// "24位彩色图像 - 多流输出除红"
#define HGLIB_OPTION_NAME_24WCSTX_DLSCCH 6L
// "24位彩色图像 - 答题卡除红"
#define HGLIB_OPTION_NAME_24WCSTX_DTKCH 7L
// "背景移除"
#define HGLIB_OPTION_NAME_BJYC 8L
// "背景色彩浮动范围"
#define HGLIB_OPTION_NAME_BJSCFDFW 9L
// "锐化与模糊"
#define HGLIB_OPTION_NAME_RHYMH 10L
// "去除摩尔纹"
#define HGLIB_OPTION_NAME_QCMW 11L
// "除网纹"
#define HGLIB_OPTION_NAME_CWW 12L
// "错误扩散"
#define HGLIB_OPTION_NAME_CWKS 13L
// "黑白图像噪点优化"
#define HGLIB_OPTION_NAME_HBTXZDYH 14L
// "噪点优化尺寸"
#define HGLIB_OPTION_NAME_ZDYHCC 15L
// "纸张尺寸"
#define HGLIB_OPTION_NAME_ZZCC 16L
// "自定义扫描区域"
#define HGLIB_OPTION_NAME_ZDYSMQY 17L
// "扫描区域左侧mm"
#define HGLIB_OPTION_NAME_SMQYZCmm 18L
// "扫描区域右侧mm"
#define HGLIB_OPTION_NAME_SMQYYCmm 19L
// "扫描区域上侧mm"
#define HGLIB_OPTION_NAME_SMQYSCmm 20L
// "扫描区域下侧mm"
#define HGLIB_OPTION_NAME_SMQYXCmm 21L
// "尺寸检测"
#define HGLIB_OPTION_NAME_CCJC 22L
// "扫描页面"
#define HGLIB_OPTION_NAME_SMYM 23L
// "跳过空白页灵敏度"
#define HGLIB_OPTION_NAME_TGKBYLMD 24L
// "分纸强度"
#define HGLIB_OPTION_NAME_FZQD 25L
// "休眠时间"
#define HGLIB_OPTION_NAME_XMSJ 26L
// "分辨率"
#define HGLIB_OPTION_NAME_FBL 27L
// "画质"
#define HGLIB_OPTION_NAME_HZ 28L
// "交换正反面"
#define HGLIB_OPTION_NAME_JHZFM 29L
// "图像拆分"
#define HGLIB_OPTION_NAME_TXCF 30L
// "自动纠偏"
#define HGLIB_OPTION_NAME_ZDJP 31L
// "启用色调曲线"
#define HGLIB_OPTION_NAME_QYSDQX 32L
// "亮度值"
#define HGLIB_OPTION_NAME_LDZ 33L
// "对比度"
#define HGLIB_OPTION_NAME_DBD 34L
// "伽马值"
#define HGLIB_OPTION_NAME_GMZ 35L
// "照片模式"
#define HGLIB_OPTION_NAME_ZPMS 36L
// "消除黑框"
#define HGLIB_OPTION_NAME_XCHK 37L
// "深色样张"
#define HGLIB_OPTION_NAME_SSYZ 38L
// "阈值"
#define HGLIB_OPTION_NAME_YZ 39L
// "背景抗噪等级"
#define HGLIB_OPTION_NAME_BJKZDJ 40L
// "边缘缩进"
#define HGLIB_OPTION_NAME_BYSJ 41L
// "背景填充方式"
#define HGLIB_OPTION_NAME_BJTCFS 42L
// "防止渗透"
#define HGLIB_OPTION_NAME_FZST 43L
// "防止渗透等级"
#define HGLIB_OPTION_NAME_FZSTDJ 44L
// "穿孔移除—左侧"
#define HGLIB_OPTION_NAME_CKYCZC 45L
// #"左侧穿孔搜索范围占幅面比例"
#define HGLIB_OPTION_NAME_ZCCKSSFWZFMBL 46L
// "穿孔移除—右侧"
#define HGLIB_OPTION_NAME_CKYCYC 47L
// #"右侧穿孔搜索范围占幅面比例"
#define HGLIB_OPTION_NAME_YCCKSSFWZFMBL 48L
// "穿孔移除—上侧"
#define HGLIB_OPTION_NAME_CKYCSC 49L
// #"上侧穿孔搜索范围占幅面比例"
#define HGLIB_OPTION_NAME_SCCKSSFWZFMBL 50L
// "穿孔移除—下侧"
#define HGLIB_OPTION_NAME_CKYCXC 51L
// #"下侧穿孔搜索范围占幅面比例"
#define HGLIB_OPTION_NAME_XCCKSSFWZFMBL 52L
// "色彩填充"
#define HGLIB_OPTION_NAME_SCTC 53L
// "超声波检测"
#define HGLIB_OPTION_NAME_CSBJC 54L
// "双张图片处理"
#define HGLIB_OPTION_NAME_SZTPCL 55L
// "装订检测"
#define HGLIB_OPTION_NAME_ZDJC 56L
// "扫描张数"
#define HGLIB_OPTION_NAME_SMZS 57L
// "扫描数量"
#define HGLIB_OPTION_NAME_SMSL 58L
// "文稿方向"
#define HGLIB_OPTION_NAME_WGFX 59L
// "背面旋转180°"
#define HGLIB_OPTION_NAME_BMXZ180 60L
// "折角检测"
#define HGLIB_OPTION_NAME_ZJJC 61L
// "折角大小"
#define HGLIB_OPTION_NAME_ZJDX 62L
// "歪斜检测"
#define HGLIB_OPTION_NAME_WXJC 63L
// "歪斜容忍度"
#define HGLIB_OPTION_NAME_WXRRD 64L
// 自动搓纸强度
#define HGLIB_OPTION_NAME_ZDCZQD 65L
// 搓纸阈值
#define HGLIB_OPTION_NAME_CZYZ 66L
// 待纸扫描
#define HGLIB_OPTION_NAME_DZSM 67L
// 黑白图像反色输出正常颜色为0 - 黑色1 - 白色)
#define HGLIB_OPTION_NAME_HBTXFSSC 68L
/* 配置枚举值 */
// "无"
#define HGLIB_OPTION_ENUMVALUE_DLSCLX_W 1L
// "彩色+灰度+黑白"
#define HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD_HB 2L
// "彩色+灰度"
#define HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD 3L
// "彩色+黑白"
#define HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HB 4L
// "灰度+黑白"
#define HGLIB_OPTION_ENUMVALUE_DLSCLX_HD_HB 5L
// "24位彩色"
#define HGLIB_OPTION_ENUMVALUE_YSMS_24WCS 6L
// "256级灰度"
#define HGLIB_OPTION_ENUMVALUE_YSMS_256JHD 7L
// "黑白"
#define HGLIB_OPTION_ENUMVALUE_YSMS_HB 8L
// "颜色自动识别"
#define HGLIB_OPTION_ENUMVALUE_YSMS_YSZDSB 9L
// "不除色"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_BCS 10L
// "除红色"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_CHS 11L
// "除绿色"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_CLS 12L
// "除蓝色"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_CHULANSE 13L
// "红色增强"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_HSZQ 14L
// "绿色增强"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_LSZQ 15L
// "蓝色增强"
#define HGLIB_OPTION_ENUMVALUE_HDHHBTX_CS_LANSEZENGQIANG 16L
// "无"
#define HGLIB_OPTION_ENUMVALUE_RHYMH_W 17L
// "锐化"
#define HGLIB_OPTION_ENUMVALUE_RHYMH_RH 18L
// "进一步锐化"
#define HGLIB_OPTION_ENUMVALUE_RHYMH_JYBRH 19L
// "模糊"
#define HGLIB_OPTION_ENUMVALUE_RHYMH_MH 20L
// "进一步模糊"
#define HGLIB_OPTION_ENUMVALUE_RHYMH_JYBMH 21L
// "A3"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A3 22L
// "8开"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_8K 23L
// "A4"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A4 24L
// "A4横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A4HX 25L
// "16开"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_16K 26L
// "16开横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_16KHX 27L
// "A5"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A5 28L
// "A5横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A5HX 29L
// "A6"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A6 30L
// "A6横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_A6HX 31L
// "B4"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_B4 32L
// "B5"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_B5 33L
// "B5横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_B5HX 34L
// "B6"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_B6 35L
// "B6横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_B6HX 36L
// "Letter"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_Letter 37L
// "Letter横向"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_LetterHX 38L
// "Double Letter"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_DoubleLetter 39L
// "LEGAL"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_LEGAL 40L
// "匹配原始尺寸"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_PPYSCC 41L
// "最大扫描尺寸自动裁切"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_ZDSMCCZDCQ 42L
// "最大扫描尺寸"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_ZDSMCC 43L
// "三联试卷"
#define HGLIB_OPTION_ENUMVALUE_ZZCC_SLSJ 44L
// "单面"
#define HGLIB_OPTION_ENUMVALUE_SMYM_DM 45L
// "双面"
#define HGLIB_OPTION_ENUMVALUE_SMYM_SM 46L
// "跳过空白页(通用)"
#define HGLIB_OPTION_ENUMVALUE_SMYM_TGKBYTY 47L
// "跳过空白页(发票纸)"
#define HGLIB_OPTION_ENUMVALUE_SMYM_TGKBYFPZ 48L
// "对折"
#define HGLIB_OPTION_ENUMVALUE_SMYM_DZ 49L
// "无"
#define HGLIB_OPTION_ENUMVALUE_HZ_W 50L
// "速度优先"
#define HGLIB_OPTION_ENUMVALUE_HZ_SDYX 51L
// "画质优先"
#define HGLIB_OPTION_ENUMVALUE_HZ_HZYX 52L
// "凸多边形"
#define HGLIB_OPTION_ENUMVALUE_BJTCFS_TDBX 53L
// "凹多边形"
#define HGLIB_OPTION_ENUMVALUE_BJTCFS_ADBX 54L
// "弱"
#define HGLIB_OPTION_ENUMVALUE_FZSTDJ_R 55L
// "较弱"
#define HGLIB_OPTION_ENUMVALUE_FZSTDJ_JR 56L
// "一般"
#define HGLIB_OPTION_ENUMVALUE_FZSTDJ_YB 57L
// "较强"
#define HGLIB_OPTION_ENUMVALUE_FZSTDJ_JQ 58L
// "强"
#define HGLIB_OPTION_ENUMVALUE_FZSTDJ_Q 59L
// "丢弃图像并停止扫描"
#define HGLIB_OPTION_ENUMVALUE_SZTPCL_DQTXBTZSM 60L
// "丢弃图像并继续扫描"
#define HGLIB_OPTION_ENUMVALUE_SZTPCL_DQTXBJXSM 61L
// "上传图像并停止扫描"
#define HGLIB_OPTION_ENUMVALUE_SZTPCL_SCTXBTZSM 62L
// "上传图像并继续扫描"
#define HGLIB_OPTION_ENUMVALUE_SZTPCL_SCTXBJXSM 63L
// "连续扫描"
#define HGLIB_OPTION_ENUMVALUE_SMZS_LXSM 64L
// "扫描指定张数"
#define HGLIB_OPTION_ENUMVALUE_SMZS_SMZDZS 65L
// "0°"
#define HGLIB_OPTION_ENUMVALUE_WGFX_0 66L
// "90°"
#define HGLIB_OPTION_ENUMVALUE_WGFX_90 67L
// "180°"
#define HGLIB_OPTION_ENUMVALUE_WGFX_180 68L
// "-90°"
#define HGLIB_OPTION_ENUMVALUE_WGFX__90 69L
// "自动文本方向识别°"
#define HGLIB_OPTION_ENUMVALUE_WGFX_ZDWBFXSB 70L
/* 配置值类型 */
#define HGLIB_OPTION_VALUETYPE_INT 1L
#define HGLIB_OPTION_VALUETYPE_ENUM 2L
#define HGLIB_OPTION_VALUETYPE_DOUBLE 3L
#define HGLIB_OPTION_VALUETYPE_BOOL 4L
/* 配置值范围类型 */
#define HGLIB_OPTION_VALUERANGETYPE_NULL 0L
#define HGLIB_OPTION_VALUERANGETYPE_INTLIST 1L
#define HGLIB_OPTION_VALUERANGETYPE_ENUMLIST 2L
#define HGLIB_OPTION_VALUERANGETYPE_DOUBLELIST 3L
#define HGLIB_OPTION_VALUERANGETYPE_INTRANGE 4L
#define HGLIB_OPTION_VALUERANGETYPE_DOUBLERANGE 5L
typedef struct
{
HGUInt size; /* 结构体大小必须初始化为sizeof(HGLibSaveImageParam) */
HGUInt jpegQuality; /* jpeg下有效, 0-100 */
HGUInt tiffCompression; /* tiff下有效, HGLIB_TIFFCOMPRESSION_* */
HGUInt tiffJpegQuality; /* tiff且HGLIB_TIFFCOMPRESSION_JPEG下有效, 0-100 */
HGBool ocr; /* 是否OCRpdf和ofd格式有效 */
}HGLibSaveImageParam;
typedef struct
{
HGInt* value;
HGUInt count;
}HGLibDeviceIntValueList;
typedef struct
{
HGUInt* value;
HGUInt count;
}HGLibDeviceEnumValueList;
typedef struct
{
HGDouble* value;
HGUInt count;
}HGLibDeviceDoubleValueList;
typedef struct
{
HGInt minValue;
HGInt maxValue;
}HGLibDeviceIntValueRange;
typedef struct
{
HGDouble minValue;
HGDouble maxValue;
}HGLibDeviceDoubleValueRange;
typedef struct
{
HGUInt option; /* 配置名, 参见HGLIB_OPTION_NAME_* */
HGUInt type; /* 值类型, 参见HGLIB_OPTION_VALUETYPE_* */
union
{
HGInt intValue;
HGUInt enumValue;
HGDouble doubleValue;
HGBool boolValue;
};
HGUInt rangeType; /* 值范围类型, 参见HGLIB_OPTION_VALUERANGETYPE_* */
union
{
HGLibDeviceIntValueList intValueList;
HGLibDeviceEnumValueList enumValueList;
HGLibDeviceDoubleValueList doubleValueList;
HGLibDeviceIntValueRange intValueRange;
HGLibDeviceDoubleValueRange doubleValueRange;
};
}HGLibDeviceParam;
typedef struct
{
HGUInt group; /* 组名, 参见HGLIB_GROUP_NAME_* */
HGLibDeviceParam* param;
HGUInt paramCount;
}HGLibDeviceParamGroup;
/* 设备热拔插回调
* event: HGLIB_DEVHOTPLUG_EVENT_*
* deviceName:
* param:
*/
typedef void (*HGLibDeviceHotPlugEventFunc)(HGUInt event, const HGChar *deviceName, HGPointer param);
/* 设备扫描事件回调
* device:
* event: HGLIB_DEVSCAN_EVENT_*
* err: , HGLIB_DEVSCAN_EVENT_INFO下有效
* info: , HGLIB_DEVSCAN_EVENT_INFO下有效
* param:
*/
typedef void (*HGLibDeviceScanEventFunc)(HGLibDevice device, HGUInt event, HGBool err, const HGChar *info, HGPointer param);
/* 设备扫描图像回调
* device:
* image: , HGLib_ReleaseImage释放,
* param:
*/
typedef void (*HGLibDeviceScanImageFunc)(HGLibDevice device, HGLibImage image, HGPointer param);
/* 加载图像 */
HGEXPORT HGLibImage HGAPI HGLib_LoadImage(const HGChar *filePath);
/* 保存图像 */
HGEXPORT HGBool HGAPI HGLib_SaveImage(HGLibImage image, const HGChar* savePath, const HGLibSaveImageParam* saveParam);
/* 释放图像 */
HGEXPORT HGBool HGAPI HGLib_ReleaseImage(HGLibImage image);
/* 初始化扫描仪 */
HGEXPORT HGBool HGAPI HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, HGPointer param);
/* 反初始化扫描仪 */
HGEXPORT HGBool HGAPI HGLib_DeinitDevice();
/* 获取扫描仪名称列表 */
HGEXPORT HGChar** HGAPI HGLib_GetDeviceNameList();
/* 销毁扫描仪名称列表 */
HGEXPORT HGBool HGAPI HGLib_ReleaseDeviceNameList(HGChar** deviceName);
/* 打开设备 */
HGEXPORT HGLibDevice HGAPI HGLib_OpenDevice(const HGChar *deviceName);
/* 关闭设备 */
HGEXPORT HGBool HGAPI HGLib_CloseDevice(HGLibDevice device);
/* 设置设备参数 */
HGEXPORT HGBool HGAPI HGLib_SetDeviceParam(HGLibDevice device, HGUInt option, const HGVoid *data);
/* 获取设备参数 */
HGEXPORT HGLibDeviceParamGroup* HGAPI HGLib_GetDeviceParamGroupList(HGLibDevice device, HGUInt *count);
HGEXPORT HGLibDeviceParam* HGAPI HGLib_GetDeviceParam(HGLibDevice device, HGUInt option);
/* 销毁设备参数 */
HGEXPORT HGBool HGAPI HGLib_ReleaseDeviceParamGroupList(HGLibDeviceParamGroup* paramGroup, HGUInt count);
HGEXPORT HGBool HGAPI HGLib_ReleaseDeviceParam(HGLibDeviceParam* param);
/* 重置设备参数 */
HGEXPORT HGBool HGAPI HGLib_ResetDeviceParam(HGLibDevice device);
/* 设备是否有纸 */
HGEXPORT HGBool HGAPI HGLib_DeviceIsPaperOn(HGLibDevice device);
/* 开始扫描 */
HGEXPORT HGBool HGAPI HGLib_StartDeviceScan(HGLibDevice device, HGLibDeviceScanEventFunc eventFunc, HGPointer eventParam,
HGLibDeviceScanImageFunc imageFunc, HGPointer imageParam);
/* 停止扫描 */
HGEXPORT HGBool HGAPI HGLib_StopDeviceScan(HGLibDevice device);
#endif /* __HGSCANNERLIB_H__ */

View File

@ -8,7 +8,7 @@ udevadm trigger
echo "installed in the dir /opt/deliwebscan"
#echo "demo web page in the static dir"
chmod 644 /etc/udev/rules.d/60-deli*
chmod 644 /etc/udev/rules.d/60-dl*
udevadm control --reload-rules
udevadm trigger