zynq_7010/zynq_7010_code/scanservices_utils.h

567 lines
13 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <string>
#include <functional>
#include <map>
#include <opencv2/opencv.hpp>
using namespace std;
/*****************************************
* 定义编译版本 *
* G400/G300 *
******************************************/
#define G300
//#define CIS_6CH
#define CIS_3CH
#ifdef CIS_6CH
#undef CIS_3CH
#elif define CIS_3CH
#undef CIS_6CHC
#else
#endif
/******************************************
* SPEEDMODE==3 60PPM *
* SPEEDMODE==4 70PPM *
* SPEEDMODE==5 80PPM *
*******************************************/
#define SPEEDMODE 5
#define MT_DEBUG
#define COLORSENSOR_SUP
/*支持低功耗模式开关*/
#define ENABLE_LOWPOWERMODE
/*支持写入系统syslog 功能开关*/
#define ENLOG_SYSLOG
#define IMAGE_COLOR 1
#define IMAGE_GRAY 0
#ifdef _LOG
#define LOG printf
#else
#define LOG //printf
#endif
#define FWVERSION "G345230918"
#define SERIALNUM "HS6010A38001P1"
typedef struct
{
int s_FRAME_COLOR_SP;
int s_FRAME_GRAY_SP;
string FWVERSIO;
}sp_COLOR_or_GRAY;
#define STR(X) #X
#define CON(a,b) STR(a##b)
typedef void (*image_callback)(int element);
static std::map<int , sp_COLOR_or_GRAY>mapFradme_SP={
{1,{0x08ED1003,0x1ACC1002,CON(G33Z,240206)}},//30 ppm
{2,{0x06DB1003,0x14A01002,CON(G34Z,240206)}},//40 ppm
{3,{0x05591003,0x100E1002,CON(G35Z,240206)}},//50 ppm
{4,{0x04421003,0x0CD11002,CON(G36Z,240206)}},//60 ppm
{5,{0x036c1003,0x0A421002,CON(G37Z,240206)}},//70 ppm
};
enum class LedStatus
{
Ready,
Scanning,
Abnormal,
NoPaper,
StopScan,
CoverOpen,
Updating,
UpdateDone
};
struct HG_JpegCompressInfo
{
unsigned int error_code;
unsigned int first_frame;
unsigned int last_frame;
unsigned int index_frame;
unsigned int DataLength;
unsigned int width;
unsigned int height;
unsigned int dpi;
unsigned char *pJpegData;
//cv::Mat mat;
};
struct HG_JpegCompressInfo_data
{
HG_JpegCompressInfo info;
unsigned char *pJpegData[1];
};
struct HG_Msg{
int code;
std::string msg;
};
enum class CISVendor
{
CIS_UNKNOWUN,
HUALIN_CIS_V0,
DUNNAN_CIS_V0,
DUNNAN_CIS_COLOR_V0
};
enum class PaperSize
{
G400_A3 = 0,
G400_A4,
G400_A4R,
G400_A5,
G400_A5R,
G400_A6,
G400_A6R,
G400_B4,
G400_B5,
G400_B5R,
G400_B6,
G400_B6R,
G400_DOUBLELETTER,
G400_LEGAL,
G400_LETTER,
G400_LETTERR,
G400_LONGLETTER,
G400_MAXSIZE,
G400_AUTO,
G400_MAXAUTO
};
struct HGSize
{
unsigned int width;
unsigned int height;
bool operator<(HGSize const &right) const
{
if (width < right.width && height < right.height)
return true;
return false;
}
};
typedef struct Paper_Res
{
Paper_Res(unsigned int res,PaperSize papertype):Res(res),PaperType(papertype){}
Paper_Res():Res(0),PaperType(PaperSize::G400_A4){}
unsigned int Res;
PaperSize PaperType;
friend bool operator<(const struct Paper_Res &a,const struct Paper_Res &b)
{
if(a.Res<b.Res || (a.Res==b.Res && a.PaperType < b.PaperType)){
return true;
}
return false;
}
}PaperRes;
union HG_ScanConfiguration
{
struct
{
unsigned int pageSize : 5;
unsigned int isColor : 1;
unsigned int dpi : 2;
unsigned int doubleFeeded : 1;
unsigned int enableStable : 1;
unsigned int enableLed : 1;
unsigned int enableSizeDetect : 1;
unsigned int lutmode : 1 ;
unsigned int slow_moire : 1;
unsigned int reversed1 : 2;
unsigned int isCorrect : 1;
unsigned int dc : 7; //0 - 100
unsigned int reversed2 : 8;
} params;
unsigned int value;
};
union VIDPID
{
struct
{
unsigned short VID;
unsigned short PID;
};
unsigned int Value;
};
struct ScannerGlue
{
ScannerGlue(const std::function<void(const HG_JpegCompressInfo &imginfo)> &imageready, const std::function<void(const int eventID,std::string)> &deviceevent) : m_imageready(imageready), m_deviceevent(deviceevent) {}
std::function<void(const HG_JpegCompressInfo &)> m_imageready;
std::function<void(const int,std::string)> m_deviceevent;
};
struct V4L2_DATAINFO
{
cv::Mat mat;
unsigned char *data;
int width;
int height;
int pixtype;
};
struct V4L2_DATAINFO_Ex:V4L2_DATAINFO
{
unsigned int frame_index; //总帧数
unsigned int dpi; //dpi
unsigned int error_code;
unsigned int first_frame; //第一帧
unsigned int lost_frame; //丢失帧
unsigned int last_frame; //最后一帧
unsigned int snap_end; //采集结束
};
typedef struct CaptureParams
{
int correctColorExposure[2][3];
int correctColorGain[2][6];
int correctColorOffset[2][6];
int correctGrayExposure[2][3];
int correctGrayGain[2][6];
int correctGrayOffset[2][6];
int colorExposure[2][3];
int colorGain[2][6];
int colorOffset[2][6];
int grayExposure[2][3];
int grayGain[2][6];
int grayOffset[2][6];
int uvCorrectColorExposure[2];
int uvCorrectGrayExposure[2];
int uvColorExposure[2];
int uvGrayExposure[2];
} CaptureParams;
struct ScannerScanInfo
{
unsigned int TotalScanned; //扫描总页数
unsigned int RollerNum;
unsigned int CuoNum; //搓纸总数
unsigned int JamInNum; //搓纸失败次数
unsigned int JamOutNum; //卡纸次数
unsigned int DoubleNum; //双张次数
unsigned int ErrorNum; //其他异常次数
unsigned int HRatio; //横向校正系数
unsigned int VRatio; //纵向校正系数
unsigned int SleepTime; //休眠时间 单位s
unsigned int SpeedMode; //速率模式
unsigned int VID; //vid
unsigned short PID; //pid
std::string SerialNum; //序列号
std::string FWVersion; //固件版本号
std::string Token; //token 令牌
};
constexpr char BULK_CTL_PATH[] = "/dev/usb-ffs/mtp/ep0";
constexpr char BULK_OUT_PATH[] = "/dev/usb-ffs/mtp/ep2";
constexpr char BULK_IN_PATH[] = "/dev/usb-ffs/mtp/ep1";
constexpr char BULK_INT_PATH[] = "/dev/usb-ffs/mtp/ep3";
constexpr char STATE_PATH[] = "/sys/class/android_usb/android0/state";
union FLAT_INFO
{
struct
{
unsigned int dpi:5;
unsigned int colormode:1;
unsigned int is_whiteimage:1;
unsigned int status:8;
unsigned int reversed:1;
unsigned int datalen:16;
}params;
unsigned int value;
};
#define SLEEP_STATUS_PATH "/mnt/flash-disk/sleep_status.txt"
#define UPDATE_STATUS_PATH "/mnt/flash-disk/update_status.txt"
enum scanner_err
{
SCANNER_ERR_OK = 0, //设备正常状态
SCANNER_ERR_SLEEP, //设备处于休眠当中
SCANNER_ERR_UPDATE_OK, //设备更新:成功
SCANNER_ERR_UPDATE_UPDATAING, //设备更新:进行中
SCANNER_ERR_UPDATE_CHECK_VAL_ERROR, //设备更新:校验检测错误
SCANNER_ERR_UPDATE_CHECK_FILE_LOST, //设备更新:文件丢失
SCANNER_ERR_UPDATE_UNZIP_FAIL, //设备更新:解压失败
};
enum ScanEvent {
S_EVT_NORES = 0x0,
S_EVT_SCAN_FINISHED = 0x2,
S_EVT_CLEAR_ERR = 0x03,
S_EVT_PAPER_PULLOUT = 0x05,
S_EVT_COVER_OPENED = 0x01,
S_EVT_COVER_CLOSED = 0x102,
S_EVT_PAPER_AT_SCAN = 0x08,
S_EVT_PAPER_NOT_AT_SCAN = 0x106,
S_EVT_DOUBLEPAPER = 0x110,
S_EVT_NOT_DOUBLEPAPER = 0x111,
S_EVT_START_SCAN = 0x45,
S_EVT_STOP_SCAN = 0x46,
S_EVT_SCAN_STARTED = 0x112,
S_EVT_SCAN_STOPPED = 0x113,
S_EVT_JAM_IN = 0x114,
S_EVT_JAM_OUT = 0x115,
S_EVT_SAMPLE_ERR = 0x116,
S_EVT_COVER_IN_OPEN = 0x117,
S_EVT_ERROR_PICKING = 0x4,
S_EVT_ERROR_JAM = 0x8,
S_EVT_ERROR_DOUBLEPAPER = 0x10,
S_EVT_ERROR_STAPLE = 0x20,
S_EVT_ERROR_FPGA = 0x44,
S_EVT_HAVING_IMAGE = 0x47,
S_EVT_ONE_PAPER_END = 0x59,
S_EVT_PAPER_NOT_STANDBY = 0,//?
S_EVT_PAPER_STANDBY = 0 //?
};
typedef struct
{
int Command;
int Data;
int Length;
} USBCB;
enum class USBCommand : unsigned int
{
//无命令
NO_COMMAND = 0,
//获取dsp 状态
GET_DSP_STATUS = 1,
//取图
GET_IMAGE = 2,
//销毁DSP中驻存的图
POP_IMAGE = 3,
//开始扫描命令
START_COMMAND = 4,
//停止扫描命令
STOP = 5,
//获取扫描仪扫描模式
GET_SCAN_MODE = 6,
//获取固件版本号
GET_FW_VERSION = 7,
//返回PC端的状态
SEND_STATUS_PC = 8,
//下发扫描配置参数
CONFIGURED_DATA = 9,
//下发固件信息
SEND_FW = 10,
//获取扫描参数
GET_CONFIG_DATA = 11,
//获取扫描总张数
GET_SCANN_NUM = 12,
//获取有无纸的状态
GET_PAPERFEEDER_STATUS = 13,
//DSP初始化
INIT_HARDWARE_SYS = 14,
//下发元器件配置参数灰度LED R曝光时间
SEND_COMPONENTS_GR = 15,
//下发元器件配置参数LED G/B曝光时间
SEND_COMPONENTS_GB = 16,
//下发扫描模式
SEND_SCAN_MODE = 17,
//开始进行平场矫正
START_FLAT = 18,
//停止平场矫正
STOP_FLAT = 19,
//下发200dpi彩色平场矫正参数
SEND_200_COLOR_FLAT_DATA = 20,
//下发300dpi彩色平场矫正参数
SEND_300_COLOR_FLAT_DATA = 21,
//获取200dpi彩色平场矫正参数
GET_200_COLOR_FLAT_DATA = 22,
//获取300dpi彩色平场矫正参数
GET_300_COLOR_FLAT_DATA = 23,
//下发200dpi灰度平场校正参数
SEND_200_GRAY_FLAT_DATA = 24,
//下发300dpi灰度平场校正参数
SEND_300_GRAY_FLAT_DATA = 25,
//获取200DPI灰度平场校正参数
GET_200_GRAY_FLAT_DATA = 26,
//获取300DPI灰度平场校正参数
GET_300_GRAY_FLAT_DATA = 27,
//下发序列号命令
SEND_SERIAL = 28,
//获取序列号命令
GET_SERIAL = 29,
//获取滚轴数
GET_ROLLER_NUM = 0x1e,
//清零滚轴数
CLR_ROLLER_NUM = 0x1f,
//清除扫描总张数
CLR_SCAN_NUM = 0x20,
//准备更新固件
PRE_UPGRADE = 0X21,
//开始更新固件
START_UPGRADE = 0x22,
//彩色的AD参数
RGB_ADI_PARA = 0x23,
//灰度的AD参数
ADI_PARA = 0x24,
//获取CIS参数曝光时间ad参数)
GET_CIS_PARA = 0x25,
//扫描张数
START_COMMAND_COUNT = 0x26,
//下发休眠时间
SET_SLEEP_TIME = 0x27,
//获取休眠时间
GET_SLEEP_TIME = 0x28,
//清除缓存
CLR_CACHE = 0x29,
//下发速度模式
SET_SPEED_MODE = 0x2a,
//获取扫描速度模式
GET_SPEED_MODE = 0X2b,
//设置固件版本一共8个字节
SET_FW_VERSION = 0X2c,
//获取DSP版本
GET_DSP_VERSION = 0X2d,
//采集板FPGA固件版本
GET_SCANFPGA_VERSION = 0x2e,
//电机板FPGA固件版本
GET_MOTORFPGA_VERSION = 0X2f,
//设置制造商信息
SET_USB_INFOR_MANUFACTURE = 0X30,
//获取制造商信息
GET_USB_INFOR_MANUFACTURE = 0X31,
//设置产品型号信息
SET_USB_INFOR_MODEL_NAME = 0X32,
//获取产品型号信息
GET_USB_INFOR_MODEL_NAME = 0X33,
//设置USB PID / VID信息
SET_USB_INFOR_VIDPID = 0X34,
GET_USB_INFOR_VIDPID = 0X35,
//设置卡纸急停检测灵敏度
SET_JAM_DETECT_SENSITIVE = 0X36,
//获取卡纸急停检测灵敏度
GET_JAM_DETECT_SENSITIVE = 0X37,
//设置横向畸变系数
SET_JUST_COF_H = 0x38,
//读取横向畸变系数
GET_JUST_COF_H = 0x39,
//G400 清除硬件异常
CLEAR_HWERROR = 0x40,
//设置纵向畸变系数
SET_JUST_COF_V = 0x41,
//读取纵向畸变系数
GET_JUST_COF_V = 0x42,
//设置彩色校正参数
SEND_COLOR_FLAT = 0x43,
//设置彩色平场校正参数
SEND_COLORCORRECT_FLAT = 0x44,
//设置灰度校正参数
SEND_GRAY_FLAT = 0x45,
//设置灰度平场校正参数
SEND_GRAYCORRECT_FLAT = 0x46,
//设置平场校正参数
GET_FLAT_DATA =0x47,
//更新完成
UPDATE_FINISHED = 0x48,
//重启
REBOOT = 0x49,
//获取日志
GET_LOG_FILES_INFO = 0x50,
//发送log文件完成
GET_UPDATE_RESULT=0x51,
//清空日志
CLEAR_LOG_FILES = 0x52,
//获取搓纸失败
GET_CUO_ERROR,
//获取双张失败次数
GET_DOU_ERROR,
//获取卡纸次数
GET_JAM_ERROR,
ACTIVE_SCANNER=0x100,
//图像处理参数下发
GETSYSINFO_LEN =0x200,
GETSYSINFO =0x201,
GETMOTORPARAM = 0x202,
GETMOTORPARMLEN=0x203,
SETMOTORPARAM = 0x204,
SETMOTORPARAMLEN = 0x205,
DEVICES_7010 = 0x7010
};
enum class HG_ScannerStatus
{
//异常
HAVE_ERROR = -1,
//正常状态
NORMAL = 0,
//开盖
OPEN_COVER = 1,
// 无纸
NO_FEED = 2,
// 搓纸失败
FEED_IN_ERROR = 4,
// 卡纸
PAPER_JAM = 8,
// 检测到双张
DETECT_DOUBLE_FEED = 16,
// 检测到订书钉
DETECT_STAPLE = 32,
// 纸张倾斜
PAPER_SKEW = 64,
// 自动模式
AUTO_SCAN_MODE = 65,
// 手动模式
MANAUL_SCAN_MODE = 66,
// 计数模式
COUNT_MODE = 67,
// 硬件错误
HARDWARE_ERROR = 68,
// FPGA崩溃
FPGA_ERROR = 68,
// 开始
START_SCAN = 69,
//停止
STOP_SCAN = 70,
//有图
HAVE_IMAGE = 71,
// 更新扫描参数
UPDATE_SCAN_PARAMETER = 72,
// PC繁忙或出错
PC_SCAN_BUSY_or_ERROR = 73,
// 更新完成
UPDATE_FINISHED = 74,
//尺寸检测错误
SIZE_ERROR=75,
//纸张有孔
PAPER_HOLE = 84,
//自动校正中
AUTO_FLATTING=198,
//USB 未连接
USB_DISCONNECTED = 200,
//用户点击停止
USER_STOP = 201,
//自动平场校正完成
AUTO_FLAT_FINISHED = 202,
SCANNER_ACTIVED=0x10
};