diff --git a/CameraParams.h b/CameraParams.h index 825a417..99d60f1 100644 --- a/CameraParams.h +++ b/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*******************************************/ \ No newline at end of file diff --git a/HCamDevice.cpp b/HCamDevice.cpp index f2e773c..04fc8f1 100644 --- a/HCamDevice.cpp +++ b/HCamDevice.cpp @@ -10,10 +10,8 @@ #include #include #include -// #include "cameraConfig.h" #include "CameraParams.h" #include -//#include "camconfig.h" #include #include @@ -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 #include -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 <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() { diff --git a/HCamDevice.h b/HCamDevice.h index e4171b7..0efca54 100644 --- a/HCamDevice.h +++ b/HCamDevice.h @@ -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); diff --git a/MultiFrameCapture.cpp b/MultiFrameCapture.cpp index 0ba0941..8ede8b1 100644 --- a/MultiFrameCapture.cpp +++ b/MultiFrameCapture.cpp @@ -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()