调整300dpi速度模式
This commit is contained in:
parent
9e33978e14
commit
0b594ec4f4
185
CameraParams.h
185
CameraParams.h
|
@ -133,188 +133,3 @@ enum PSReg
|
|||
DATA_STATUS,
|
||||
REG_NUM,
|
||||
};
|
||||
|
||||
union CAM_INFO_REG
|
||||
{
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int ProjectVersion : 6; //所属项目版本
|
||||
unsigned int cam_run_status : 1; //相机扫描状态
|
||||
unsigned int vidio_status : 1; // v4l状态
|
||||
unsigned int CIS_count : 8; // CIS计数
|
||||
unsigned int CIS_Width : 16;
|
||||
/* data */
|
||||
};
|
||||
};
|
||||
|
||||
union CAM_STATUS_REG
|
||||
{
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int doImageProcess : 1; //启用图像处理
|
||||
unsigned int dosplice : 1; //启用拼接
|
||||
unsigned int doCorrect : 1; //是否启用校正
|
||||
unsigned int continuousScan : 1; //是否是连续扫描
|
||||
unsigned int NoAIOBuffer :1 ; // 是否使用AIO buffer , 0:自行管理buffer 1:AIO buffer管理
|
||||
unsigned int INTPrintInfo:2;
|
||||
unsigned int reserve : 5 ;
|
||||
unsigned int dataIn : 1; //数据输入
|
||||
unsigned int simulateData : 1; //是否启用PS模拟数据
|
||||
unsigned int doSort : 1; //是否进行排序
|
||||
unsigned int doZoom : 1; //是否进行缩放
|
||||
unsigned int ratio_deno : 8; // resize分母
|
||||
unsigned int ratio_num : 8; // resize分子
|
||||
};
|
||||
};
|
||||
|
||||
union ADC_INFO_REG
|
||||
{
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int adc_channel_num : 8; // adc通道数量
|
||||
unsigned int adc_agin_bit_width : 5; // adc增益位宽
|
||||
unsigned int adc_offset_bit_width : 5; // adc偏移位宽
|
||||
unsigned int unuse : 14;
|
||||
};
|
||||
};
|
||||
|
||||
union Heartbeat_REG
|
||||
{
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int hart_interval_ms : 31;
|
||||
unsigned int eable_heartbeat : 1;
|
||||
};
|
||||
};
|
||||
|
||||
union DATA_STATUS_REG
|
||||
{
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int dataIn : 1;
|
||||
unsigned int nuse : 31;
|
||||
};
|
||||
};
|
||||
|
||||
enum VERSION_ATTR
|
||||
{
|
||||
Release = 0,
|
||||
Alpha, //内部测试版本
|
||||
Beta, //外部测试版本
|
||||
Demo, //演示版本
|
||||
Free, //自由版本
|
||||
Full, //完全版本
|
||||
Standard, //标准版
|
||||
SpecialVersion = 15
|
||||
};
|
||||
|
||||
enum SpecialId
|
||||
{
|
||||
SpecialID_zero = 0,
|
||||
SpecialID_CODE = 15,
|
||||
};
|
||||
|
||||
union VERSION_INFO
|
||||
{
|
||||
/* data */
|
||||
int value = 0;
|
||||
struct
|
||||
{
|
||||
unsigned int AmendMentVersion : 8; //修订版本
|
||||
unsigned int SpecialIdent : 4; //特别标识
|
||||
VERSION_ATTR AttrVersion : 4; //版本描述
|
||||
unsigned int NextVersion : 8; //次要版本
|
||||
unsigned int MajorVersion : 8; //主要版本
|
||||
};
|
||||
};
|
||||
|
||||
enum PERJECT_VERSION
|
||||
{
|
||||
PythonZ1200_O,
|
||||
PythonZ1200 = 1,
|
||||
PythonZ1800_3_CHANNEL,
|
||||
PythonZ108,
|
||||
PythonZ54,
|
||||
PythonZ1800,
|
||||
PythonZWSS,
|
||||
PythonZ1206,
|
||||
PythonZ1602
|
||||
};
|
||||
|
||||
// cn : 中断端点数据解析 en : INT BLUK envent
|
||||
enum INT_EVENT_CODE
|
||||
{
|
||||
EVENT_CAM_GEGIN = -0x99, // cn : 相机事件边界
|
||||
EVENT_CAM_RECOVING_FILED= -15,// cn : 相机恢复数据错误
|
||||
EVNET_CAM_RECV_ERROR = -14, // cn : 相机传输数据错误
|
||||
EVENT_CAM_OPEN_ERROR = -13, // cn : 相机打开文件错误
|
||||
EVENT_CAM_BUF_FULL = -12, // cn : 相机缓冲区满
|
||||
EVENT_CAM_OVER_CLK, // cn : 相机触发超频
|
||||
EVENT_CAM_EXEC_FAIL, // cn : 相机致命错误退出事件
|
||||
EVENT_CAM_FATAL = -3, // cn : 相机致命错误事件
|
||||
EVENT_CAM_ERROR, // cn : 相机错误事件
|
||||
EVENT_CAM_WARRING, // cn : 相机警告事件
|
||||
EVENT_CAM_STOP = 0, // cn : 相机停止事件
|
||||
EVENT_CAM_START, // cn : 相机开始事件
|
||||
EVENT_CAM_BUTN_START, // cn : 相机外部启动
|
||||
EVENT_BY_FPGA, // cn : 由FPGA发起的相机事件
|
||||
EVENT_CAM_SP_PRO, // cn : 工程特殊事件
|
||||
EVENT_CAM_HEATBEAT, // cn : 相机心跳事件
|
||||
EVENT_CAM_SUCESS = 10, // cn : 相机执行成功
|
||||
EVENT_CAM_PAUSE, // cn : 相机暂停运作
|
||||
EVENT_CAM_CLOSE, // cn : 相机关闭
|
||||
EVENT_CAM_INFO, // cn : 相机基本信息
|
||||
EVENT_CAM_RECOVING, // cn : 相机尝试恢复数据
|
||||
EVENT_CAM_RECOVed, // cn : 相机恢复数据成功
|
||||
EVENT_CAM_ERAS, // cn : 相机擦除数据
|
||||
EVENT_CAM_WRITE, // cn : 相机写入固件
|
||||
EVENT_CAM_CHECK, // cn : 相机检查数据
|
||||
|
||||
EVENT_CAM_EVENT_END = 0x99, // cn :相机地址终止符
|
||||
};
|
||||
|
||||
struct INT_EVENT_HEAD
|
||||
{
|
||||
INT_EVENT_CODE EventID;
|
||||
unsigned int EventLength;
|
||||
char *EventData;
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CP_STOP,
|
||||
CP_START,
|
||||
CP_CLEAR_FIFO,
|
||||
CP_Phase,
|
||||
CP_SpTime,
|
||||
CP_SaveADC,
|
||||
CP_SavePS,
|
||||
CP_SpTime_VSNP,
|
||||
CP_Send_Buffer,
|
||||
CP_SEND_FILE = 10,
|
||||
CP_SEND_CMD,
|
||||
CP_UPGRADE,
|
||||
CP_SAFE_SEND, //未使用
|
||||
CP_SAFE_DATE_SEND, //未使用
|
||||
CP_UP_CLear ,
|
||||
CP_SAVE_SP,
|
||||
CP_READ_ADC_AGIN,
|
||||
CP_READ_ADC_OFFSET,
|
||||
CP_WRITE_ADC_AGIN,
|
||||
CP_WRITE_ADC_OFFSET,
|
||||
CP_WRITE_CORRECT,
|
||||
CP_WRITE_MONTAGE,
|
||||
CP_READ_CURRENT_LINE,
|
||||
CP_READ_CACHING_DARA,
|
||||
CP_GET_DPI = 100,
|
||||
CP_GET_DPI_LENTH,
|
||||
CP_LOOP_TEST = 200,
|
||||
CP_IMAGE_TEST,
|
||||
} Capture_flag;
|
||||
|
||||
/****************************PS REG DEFINE*******************************************/
|
133
HCamDevice.cpp
133
HCamDevice.cpp
|
@ -10,10 +10,8 @@
|
|||
#include <sys/mman.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <string.h>
|
||||
// #include "cameraConfig.h"
|
||||
#include "CameraParams.h"
|
||||
#include <linux/v4l2-subdev.h>
|
||||
//#include "camconfig.h"
|
||||
#include <iostream>
|
||||
#include <errno.h>
|
||||
|
||||
|
@ -381,7 +379,6 @@ void HCamDevice::HtCamStartVideoCapturing()
|
|||
|
||||
if (ioctl(videofd, VIDIOC_QBUF, &buf) == -1)
|
||||
{
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
camera_err(" VIDIOC_QBUF error\n");
|
||||
|
||||
if (drivertype == V4L2_CAP_VIDEO_CAPTURE_MPLANE)
|
||||
|
@ -401,13 +398,11 @@ void HCamDevice::HtCamStartVideoCapturing()
|
|||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (ioctl(videofd, VIDIOC_STREAMON, &type) == -1)
|
||||
{
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 0;
|
||||
camera_err(" VIDIOC_STREAMON error! %s\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
((CAM_INFO_REG *)&pPsReg[CAM_INFO])->cam_run_status = 1;
|
||||
//camera_print(" stream on succeed\n");
|
||||
}
|
||||
startFPGAScan();
|
||||
|
@ -586,33 +581,6 @@ void HCamDevice::startFPGAScan()
|
|||
HtCamStartSampling();
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamChangeAdjustSpTime(uint32_t sp_time_gap, uint32_t sp_time_rw)
|
||||
{
|
||||
uint32_t *pCamCtrlReg = virBaseAddr;
|
||||
|
||||
sp_time_gap = (sp_time_gap << 16);
|
||||
pCamCtrlReg[3] |= (uint32_t)(sp_time_rw);
|
||||
pCamCtrlReg[3] |= (uint32_t)(sp_time_gap);
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamChangeAdjustPhase(uint16_t times, uint8_t dir)
|
||||
{
|
||||
uint32_t *pCamCtrlReg = virBaseAddr;
|
||||
int i;
|
||||
if (dir)
|
||||
pCamCtrlReg[10] |= (1 << 9);
|
||||
else
|
||||
pCamCtrlReg[10] &= ~(1 << 9);
|
||||
|
||||
for (i = 0; i < times; i++)
|
||||
{
|
||||
pCamCtrlReg[10] &= ~(1 << 8);
|
||||
pCamCtrlReg[10] |= (1 << 8);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
pCamCtrlReg[10] &= ~(1 << 10);
|
||||
pCamCtrlReg[10] |= (1 << 10);
|
||||
}
|
||||
}
|
||||
|
||||
// This function is prohibited
|
||||
int HCamDevice::HtCamStartSampling()
|
||||
|
@ -1235,15 +1203,6 @@ void HCamDevice::HtCamChangeMonoStartSample(int start_sample)
|
|||
pCamCtrlReg[13] |= (uint32_t)(ss << 16);
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamChangePhase(int phase)
|
||||
{
|
||||
// phase &= 0xff ;
|
||||
// VSNP = phase;
|
||||
// unsigned int oValue = HtCamReadFpgaRegs(16);
|
||||
// oValue = oValue & 0xffffff00;
|
||||
// oValue = oValue + phase ;
|
||||
// HtCamWriteFpgaRegs(16, oValue);
|
||||
}
|
||||
|
||||
void HCamDevice::ChangeScanState(bool state)
|
||||
{
|
||||
|
@ -1321,54 +1280,15 @@ int HCamDevice::HtCamGetColorMode()
|
|||
void HCamDevice::init_ps_regs()
|
||||
{
|
||||
|
||||
// pPsReg[CAM_DPI] = psConfig.getReg(CAM_DPI);
|
||||
// pPsReg[RLS_CHECK_CODE] = psConfig.getReg(RLS_CHECK_CODE);
|
||||
//pPsReg[HEARTBAT] = psConfig.getReg(HEARTBAT);
|
||||
}
|
||||
|
||||
uint32_t HCamDevice::HtCamReadPsRegs(uint8_t reg_addr)
|
||||
{
|
||||
return pPsReg[reg_addr];
|
||||
}
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
void HCamDevice::HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value)
|
||||
{
|
||||
printf("reg addr %d\r\n" ,reg_addr );
|
||||
if (reg_addr >= PSReg::REG_NUM)
|
||||
return;
|
||||
pPsReg[reg_addr] = reg_value;
|
||||
switch (reg_addr)
|
||||
{
|
||||
case BUF_WIDTH:
|
||||
case BUF_HEIGHT:
|
||||
case BUF_NUM:
|
||||
HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT], pPsReg[BUF_NUM]);
|
||||
break;
|
||||
case CAM_DPI:
|
||||
HtCamPsDpiChange(reg_value);
|
||||
break;
|
||||
case CAM_STATUS:
|
||||
{
|
||||
HtCamImageProcessChange();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void HCamDevice::savePsReg()
|
||||
{
|
||||
// CamPSConfig psConfig(CONFIG_PATH);
|
||||
// psConfig.setReg(PS_VERSION , pPsReg[PS_VERSION] );
|
||||
// psConfig.setReg(CAM_STATUS , pPsReg[CAM_STATUS] );
|
||||
// psConfig.setReg(MOTOR_SPEED , pPsReg[MOTOR_SPEED]);
|
||||
// psConfig.setReg(CAM_DPI , pPsReg[CAM_DPI] );
|
||||
// psConfig.setReg(HEARTBAT , pPsReg[HEARTBAT] );
|
||||
// psConfig.setReg(RLS_CHECK_CODE, pPsReg[RLS_CHECK_CODE]);
|
||||
// psConfig.save();
|
||||
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamWriteAllADC()
|
||||
|
@ -1424,59 +1344,8 @@ void HCamDevice::HtCamResizeBuffer(int width, int height, int number)
|
|||
}
|
||||
|
||||
|
||||
void HCamDevice::HtCamImageProcessChange()
|
||||
{
|
||||
CAM_STATUS_REG* status = (CAM_STATUS_REG*)&pPsReg[CAM_STATUS];
|
||||
if(status->doImageProcess)
|
||||
{
|
||||
HtCamPsDpiChange(pPsReg[CAM_DPI]);
|
||||
}else
|
||||
{
|
||||
pPsReg[IMG_WIDTH] = pPsReg[BUF_WIDTH];
|
||||
}
|
||||
}
|
||||
|
||||
// DPI切换-暂只适配1200/1800
|
||||
bool HCamDevice::HtCamPsDpiChange(int dpi)
|
||||
{
|
||||
std::cout << "DPI Change for " << dpi <<std::endl;
|
||||
for (auto i = _DPI_WIDTH.begin(); i != _DPI_WIDTH.end(); i++)
|
||||
{
|
||||
if (dpi == i->first)
|
||||
{
|
||||
_N_DPI = dpi;
|
||||
_IMG_BUF_WIDTH = i->second;
|
||||
|
||||
pPsReg[BUF_WIDTH] = _DPI_V4LWIDTH[dpi];
|
||||
if(dpi != 300 || dpi != 600)
|
||||
{
|
||||
((CAM_STATUS_REG*)&pPsReg[CAM_STATUS])->doZoom = 1 ;
|
||||
}
|
||||
if (dpi > 300)
|
||||
{
|
||||
HtCamSetDpi(0);
|
||||
pPsReg[BUF_HEIGHT] = _V4LHEIGHT/2;
|
||||
}
|
||||
else
|
||||
{
|
||||
HtCamSetDpi(1);
|
||||
pPsReg[BUF_HEIGHT] = _V4LHEIGHT;
|
||||
}
|
||||
|
||||
|
||||
if(v4lWidth != pPsReg[BUF_WIDTH] || v4lHeight != pPsReg[BUF_HEIGHT] || v4lBufferCount != pPsReg[BUF_NUM])
|
||||
{
|
||||
HtCamResizeBuffer(pPsReg[BUF_WIDTH], pPsReg[BUF_HEIGHT] , pPsReg[BUF_NUM]);
|
||||
camera_print(" fmt.fmt.pix.width = %d\n", v4lWidth);
|
||||
camera_print(" fmt.fmt.pix.height = %d\n", v4lHeight);
|
||||
camera_print(" fmt.fmt.pix.field = %d\n", pPsReg[BUF_NUM]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void HCamDevice::HtCamOverClockClear()
|
||||
{
|
||||
|
|
|
@ -107,8 +107,6 @@ public:
|
|||
|
||||
void HtCamChangeTriggerInAndEXt(int in_out);
|
||||
|
||||
uint32_t HtCamReadPsRegs(uint8_t reg_addr);
|
||||
void HtCamWritePsRegs(uint8_t reg_addr, uint32_t reg_value);
|
||||
void savePsReg();
|
||||
|
||||
void HtCamWriteAllADC();
|
||||
|
@ -126,7 +124,6 @@ public:
|
|||
void setConfig(Camconfig* _config){config = _config;}
|
||||
|
||||
void HtCamChangeMonoStartSample(int start_sample);
|
||||
void HtCamChangePhase(int phase);
|
||||
|
||||
void ChangeScanState(bool state);
|
||||
|
||||
|
@ -139,16 +136,10 @@ private:
|
|||
void init_ps_regs();
|
||||
void HtCamSwitchSampleModes(unsigned char mode);//测试数据
|
||||
|
||||
|
||||
void HtCamExitVideoCapturing();
|
||||
void HtCamResizeBuffer(int width, int height, int number);
|
||||
void HtCamChangeAdjustSpTime(uint32_t sp_time_gap, uint32_t sp_time_rw);
|
||||
void HtCamChangeAdjustPhase(uint16_t times, uint8_t dir);
|
||||
|
||||
|
||||
bool HtCamPsDpiChange(int dpi);
|
||||
|
||||
void HtCamImageProcessChange();
|
||||
|
||||
int HtCamEventWorkThread(void);
|
||||
|
||||
|
|
|
@ -103,7 +103,9 @@ void MultiFrameCapture::snap()
|
|||
if (m_config.params.dpi == 3)
|
||||
this_thread::sleep_for(std::chrono::milliseconds(160));
|
||||
else if(m_config.params.dpi == 2)
|
||||
this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
this_thread::sleep_for(std::chrono::milliseconds(45));
|
||||
else
|
||||
this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
|
||||
video->HtCamStartVideoCapturing();
|
||||
|
||||
|
@ -188,7 +190,7 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
|
|||
|
||||
|
||||
//int height = resolution_ == DPI_600 ? 342 : 900;
|
||||
int height = config.params.dpi == 3 ? 342 :(config.params.dpi == 2?900:513);
|
||||
int height = config.params.dpi == 3 ? 342 :(config.params.dpi == 2?999:513);
|
||||
compute_height(WIDTH , height);
|
||||
|
||||
video->HtCamSetClolr(color_mode_);
|
||||
|
@ -208,10 +210,10 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
|
|||
int val = config.params.dpi == 3 ? 600 :(config.params.dpi == 2?300:200);
|
||||
printf("val = %d\r\n",val);
|
||||
uint32_t cnt = compute_frame(paper_size_ , val) ; //多设一帧
|
||||
// if (m_config.params.dpi == 3)
|
||||
// {
|
||||
// cnt +=1 ;
|
||||
// }
|
||||
if (m_config.params.dpi == 2 && m_config.params.pageSize == (int)PaperSize::G400_A4)
|
||||
{
|
||||
cnt -=1 ;
|
||||
}
|
||||
|
||||
video->HtCamSetFrameCnt(cnt);
|
||||
printf(" -----------------------设置帧数:%d------------------\r\n",cnt);
|
||||
|
@ -260,13 +262,7 @@ void MultiFrameCapture::waitsnapdone(int state)
|
|||
{
|
||||
StopWatch sw;
|
||||
sw.reset();
|
||||
#ifdef TEST_SIMCAP
|
||||
HG_JpegCompressInfo info;
|
||||
info.DataLength = m_test_pimg_len;
|
||||
info.pJpegData = (unsigned char *)m_test_pimg;
|
||||
|
||||
m_glue.m_imageready(info);
|
||||
#else
|
||||
printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait \n");
|
||||
V4L2_DATAINFO_Ex info;
|
||||
info.snaped_index = snaped_index;
|
||||
|
@ -283,7 +279,7 @@ void MultiFrameCapture::waitsnapdone(int state)
|
|||
b_end_snap = true;
|
||||
m_frameinfos.Put(info);
|
||||
printf("!!!!!!!!!!!!!!!! m_cv_snapdone wait done :%f \n",sw.elapsed_ms());
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
bool MultiFrameCapture::IsImageQueueEmpty()
|
||||
|
|
Loading…
Reference in New Issue