调整300dpi速度模式

This commit is contained in:
modehua 2023-09-19 02:09:59 -07:00
parent 9e33978e14
commit 0b594ec4f4
4 changed files with 10 additions and 339 deletions

View File

@ -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 1AIO 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*******************************************/

View File

@ -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()
{

View File

@ -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);

View File

@ -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()