diff --git a/zynq_7010_code/CuoZhiMotor.cpp b/zynq_7010_code/CuoZhiMotor.cpp index f699565..5945d77 100644 --- a/zynq_7010_code/CuoZhiMotor.cpp +++ b/zynq_7010_code/CuoZhiMotor.cpp @@ -8,7 +8,7 @@ CuoZhiMotor::CuoZhiMotor() m_cuoparamex = m_mtconfig->GetMotorSpeedParam(false, t_smbtype, 4, 1, 1); speedConfig(); mspCuozhiFeeding = {.finalPeriod = 1427500, .Fmin = 2027500, .stepnum = 30, .a = 100, .offset = 4, .finalDelay = 3000}; - if (smbtype == SMBType::MB_DRV_TMC216) + //if (smbtype == SMBType::MB_DRV_TMC216) { mspCuozhiFeeding.finalPeriod /= 4; mspCuozhiFeeding.Fmin /= 4; @@ -59,7 +59,7 @@ void CuoZhiMotor::reset() mspCuozhiBackward.a, mspCuozhiBackward.offset, mspCuozhiBackward.finalDelay); - //printf("finalPeriod=%d Fmin=%d \n", mspCuozhiBackward.finalPeriod, mspCuozhiBackward.Fmin); + printf("finalPeriod=%d Fmin=%d \n", mspCuozhiBackward.finalPeriod, mspCuozhiBackward.Fmin); Motor::start(delays_forward, mspCuozhiBackward); std::random_device rd; // obtain a random number from hardware std::mt19937 gen(rd()); // seed the generator @@ -96,10 +96,9 @@ void CuoZhiMotor::feeding() Motor::start(delays_feeding, mspCuozhiFeeding); } -void CuoZhiMotor::speedChange(int speed, int dpi, int colormode) // speed should be in range [0,5] (by ply,at 2019.5.23) +void CuoZhiMotor::speedChange(MotorSpeedParamEx paramex) { - auto t_smbtype = MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;//smbtype == SMBType::MB_DRV_8825 ? MotorConfig::MTBDType::MT_DRV : MotorConfig::MTBDType::MT_TMC; - m_cuoparamex = m_mtconfig->GetMotorSpeedParam(false, t_smbtype, speed, colormode, dpi); + m_cuoparamex = paramex; speedConfig(); } @@ -110,17 +109,6 @@ void CuoZhiMotor::speedRecover() void CuoZhiMotor::speedConfig() { - LOG("CuoZhiMotor speed=%d \n dpi=%d \n colormode=%d \n finalPeriod=%d \n Fmin=%d \n a=%.2f \n offset=%.2f \n stepnum=%.2f \n finalDelay=%.2f \n ", - m_cuoparamex.speed, - m_cuoparamex.dpi, - m_cuoparamex.colormode, - m_cuoparamex.mt_param.finalPeriod, - m_cuoparamex.mt_param.Fmin, - m_cuoparamex.mt_param.a, - m_cuoparamex.mt_param.offset, - m_cuoparamex.mt_param.stepnum, - m_cuoparamex.mt_param.finalDelay); - delays_forward.clear(); delays_forward = speedup_cfg(m_cuoparamex.mt_param.finalPeriod, m_cuoparamex.mt_param.Fmin, m_cuoparamex.mt_param.stepnum, m_cuoparamex.mt_param.a, m_cuoparamex.mt_param.offset, m_cuoparamex.mt_param.finalDelay); diff --git a/zynq_7010_code/CuoZhiMotor.h b/zynq_7010_code/CuoZhiMotor.h index b28ca99..26e21f5 100644 --- a/zynq_7010_code/CuoZhiMotor.h +++ b/zynq_7010_code/CuoZhiMotor.h @@ -24,7 +24,7 @@ public: void feeding(); - void speedChange(int speed, int dpi = 1,int colormode = 1); + void speedChange(MotorSpeedParamEx paramex); void speedRecover(); diff --git a/zynq_7010_code/Scanner.cpp b/zynq_7010_code/Scanner.cpp index 1471395..fc8a7ee 100644 --- a/zynq_7010_code/Scanner.cpp +++ b/zynq_7010_code/Scanner.cpp @@ -11,23 +11,17 @@ #define BTN_NORMAL_POWER 3 //按键正常模式 (退出低功耗) Scanner::Scanner(ScannerGlue glue) - : motorZouzhi(), - motorCuozhi(), - m_glue(glue), - m_isPulling(false), - m_isDoublePaper(false), - isPaperInit(false), - m_jamPaper(false), - m_jamIn(false), - m_correctting(false), - waitpapertime(200), - m_scansysinfo(nullptr) + : motorZouzhi(),motorCuozhi(),motor_cfg_(), + m_glue(glue),m_isPulling(false), + m_isDoublePaper(false),isPaperInit(false), + m_jamPaper(false),m_jamIn(false), + m_correctting(false),waitpapertime(200), + m_scansysinfo(nullptr),auto_size_(false) { frame_time_ = 3000; m_scaninfo = GetScanInfoFromJson(); capturer.reset(new MultiFrameCapture(m_glue)); - capturer->SetParent(this); capturer->set_image_callback(&have_img_callback); @@ -78,6 +72,7 @@ Scanner::Scanner(ScannerGlue glue) FsmState::setScanner(this); threadRunMessageLoop = std::thread(&Scanner::runMessageLoop, this); Motor::enablePower(true); + UpdateScanInfo(); } Scanner::~Scanner() @@ -93,25 +88,63 @@ Scanner::~Scanner() threadRunScan.join(); } - void Scanner::updateSpeedMode() { m_scaninfo = GetScanInfoFromJson(); - int sp = m_scaninfo.SpeedMode; - if(sp == 0) - sp = 3; + int speed = m_scaninfo.SpeedMode; + printf("JSON文件获取当前速度:%d\r\n",speed); + if(speed == 0) + speed = 3; unsigned int t_dpi = m_config.params.dpi; if(m_config.params.pageSize == (unsigned int)PaperSize::G400_MAXSIZE || m_config.params.pageSize == (unsigned int)PaperSize::G400_MAXAUTO ) //长文稿采用600dpi模式扫描 t_dpi = 3; if (m_config.params.slow_moire) //摩尔纹特殊处理 - t_dpi = sp = 16; + t_dpi = speed = 16; - motorCuozhi.speedChange(sp, t_dpi,m_config.params.isColor); - motorZouzhi.speedChange(sp, t_dpi,m_config.params.isColor); + Zouzhi_ParamEx_ = motor_cfg_.GetMotorSpeedParam(true,MotorConfig::MTBDType::MT_TMC,speed,m_config.params.isColor,t_dpi); + Cuozhi_ParamEx_ = motor_cfg_.GetMotorSpeedParam(false,MotorConfig::MTBDType::MT_TMC,speed,m_config.params.isColor,t_dpi); + + motorCuozhi.speedChange(Cuozhi_ParamEx_); + motorZouzhi.speedChange(Zouzhi_ParamEx_); } +void Scanner::ConfigScanParam(HG_ScanConfiguration config) +{ + m_config = config; + auto_size_ = m_config.params.pageSize==(int)PaperSize::G400_AUTO || + m_config.params.pageSize==(int)PaperSize::G400_MAXAUTO || + m_config.params.pageSize==(int)PaperSize::G400_MAXSIZE; + updateSpeedMode(); + capturer->UpdateScanParam(m_config); +} +void Scanner::UpdateScanInfo() +{ + m_scaninfo = GetScanInfoFromJson(); + auto params = motor_cfg_.GetMotorSpeedParams(true,MotorConfig::MTBDType::MT_TMC); + for (int i = 0; i < params.size(); i++) + { + if (params[i].speed == m_scaninfo.SpeedMode) + { + auto fpgaparam = GetFpgaparam(params[i].dpi, params[i].colormode); + fpgaparam.Sp = params[i].sp; + SaveFpgaparam(fpgaparam); + if (params[i].dpi == 3 && params[i].colormode) + { + printf("sp sp sp sp sp sp sp sp sp:%d :%d\r\n",params[i].sp,fpgaparam.Sp); + } + + } + // if(params[i].speed == 0x10) + // { + // auto fpgaparam = GetFpgaparam(params[i].dpi, params[i].colormode); + // fpgaparam.Sp = params[i].sp; + // SaveFpgaparam(fpgaparam); + // } + } + updateSpeedMode(); +} void Scanner::have_img_callback(int val) { if (val < 0) @@ -126,7 +159,7 @@ void Scanner::startScan() if (threadRunScan.joinable()) threadRunScan.join(); stop_countdown(); - this_thread::sleep_for(std::chrono::milliseconds(200)); + updateSpeedMode(); // //开始进行扫描 threadRunScan = std::thread(&Scanner::runScan, this); @@ -452,7 +485,7 @@ void Scanner::reset() motorCuozhi.reset(); isRested = true; isPaperInit = false; - LOG("Scanner->motorCuozhi is reseted \n"); + printf("Scanner->motorCuozhi is reseted \n"); } } void Scanner::paper_pullout() @@ -461,7 +494,8 @@ void Scanner::paper_pullout() m_isPulling = true; motorCuozhi.stop(); - motorZouzhi.speedChange(1); + MotorSpeedParamEx ParamEx = motor_cfg_.GetMotorSpeedParam(true,MotorConfig::MTBDType::MT_TMC,1,1,1); + motorZouzhi.speedChange(ParamEx); motorZouzhi.setDirection(1); motorZouzhi.start(); if (sensor->waitPaperOut(5000)) @@ -471,8 +505,3 @@ void Scanner::paper_pullout() m_isPulling = false; } -void Scanner::UpdateScanInfo() -{ - m_scaninfo = GetScanInfoFromJson(); - updateSpeedMode(); -} \ No newline at end of file diff --git a/zynq_7010_code/Scanner.h b/zynq_7010_code/Scanner.h index 29bd0f0..b864d4a 100644 --- a/zynq_7010_code/Scanner.h +++ b/zynq_7010_code/Scanner.h @@ -17,10 +17,11 @@ #include "SysInforTool.h" #include "MotorConfig.h" #include "correct_ultis.h" + class ICapturer; class MemoryInfo; -// class SysInforTool; - static int frame_time_ ; + +static int frame_time_ ; class Scanner { std::mutex cb_lock_; @@ -51,7 +52,8 @@ public: inline bool isFeederLoaded() { return sensor->isPaperStandby(); } inline void put(ScanEvent evt) { sysEvent.Put(evt); } - inline void ConfigScanParam(HG_ScanConfiguration config) {capturer->UpdateScanParam(m_config = config); } + void ConfigScanParam(HG_ScanConfiguration config) ; + inline void SetDstScanNum(int scannum) { m_DstScannum = scannum; } inline void SetIsDoublePaper(bool isdoublepaper) { m_isDoublePaper = isdoublepaper; } @@ -91,6 +93,10 @@ private: private: ZouZhiMotor motorZouzhi; CuoZhiMotor motorCuozhi; + MotorConfig motor_cfg_; + + MotorSpeedParamEx Zouzhi_ParamEx_; + MotorSpeedParamEx Cuozhi_ParamEx_; PanelLeds panelLeds; std::thread threadRunScan; @@ -113,6 +119,7 @@ private: volatile bool m_correctting; bool isPaperInit; + bool auto_size_;//匹配原始尺寸类型尺寸 int waitpapertime; MemoryInfo *meminfo; diff --git a/zynq_7010_code/ZouZhiMotor.cpp b/zynq_7010_code/ZouZhiMotor.cpp index 495f19d..9e0efa3 100644 --- a/zynq_7010_code/ZouZhiMotor.cpp +++ b/zynq_7010_code/ZouZhiMotor.cpp @@ -4,7 +4,7 @@ ZouZhiMotor::ZouZhiMotor() : Motor(motorPorts_Zouzhi) { - auto t_smbtype =MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;// smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV; + auto t_smbtype =MotorConfig::MTBDType::MT_TMC; m_zouparamex = m_mtconfig->GetMotorSpeedParam(true, t_smbtype, 4, 1, 1); speedConfig(); } @@ -18,10 +18,9 @@ void ZouZhiMotor::start() Motor::start(delays, m_zouparamex.mt_param); } -void ZouZhiMotor::speedChange(int speed, int dpi, int colormode) // speed should be in range [0,5] (by ply,at 2019.5.23) +void ZouZhiMotor::speedChange(MotorSpeedParamEx paramex) { - auto t_smbtype = MotorConfig::MTBDType::MT_TMC;//SMBType::MB_DRV_TMC216;//smbtype == SMBType::MB_DRV_TMC216 ? MotorConfig::MTBDType::MT_TMC : MotorConfig::MTBDType::MT_DRV; - m_zouparamex = m_mtconfig->GetMotorSpeedParam(true, t_smbtype, speed, colormode, dpi); + m_zouparamex = paramex; speedConfig(); } diff --git a/zynq_7010_code/ZouZhiMotor.h b/zynq_7010_code/ZouZhiMotor.h index 08d9993..84ce422 100644 --- a/zynq_7010_code/ZouZhiMotor.h +++ b/zynq_7010_code/ZouZhiMotor.h @@ -6,7 +6,7 @@ public: ZouZhiMotor(); ~ZouZhiMotor(); virtual void start(); - void speedChange(int speed, int dpi = 1,int colormode = 1); + void speedChange(MotorSpeedParamEx paramex); void speedRecover(); private: diff --git a/zynq_7010_code/scanservices_utils.h b/zynq_7010_code/scanservices_utils.h index 80444a0..9c85443 100644 --- a/zynq_7010_code/scanservices_utils.h +++ b/zynq_7010_code/scanservices_utils.h @@ -62,11 +62,11 @@ typedef struct typedef void (*image_callback)(int element); static std::mapmapFradme_SP={ - {1,{0x08ED1003,0x1ACC1002,CON(G34D,231027)}},//40 ppm - {2,{0x06DB1003,0x14A01002,CON(G3ZY,240102)}},//50 ppm - {3,{0x05591003,0x100E1002,CON(G36D,231027)}},//60 ppm - {4,{0x04421003,0x0CD11002,CON(G37D,231027)}},//70 ppm - {5,{0x036c1003,0x0A421002,CON(G38D,231027)}},//80 ppm + {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