增加守护进程 增加摩尔纹模式,调整bug

This commit is contained in:
modehua 2023-10-19 02:29:46 -07:00
parent 947e525ce8
commit 91a5de2d13
13 changed files with 205 additions and 133 deletions

View File

@ -112,16 +112,16 @@ void CuoZhiMotor::speedRecover()
void CuoZhiMotor::speedConfig() void CuoZhiMotor::speedConfig()
{ {
// printf("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 ", printf("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.speed,
// m_cuoparamex.dpi, m_cuoparamex.dpi,
// m_cuoparamex.colormode, m_cuoparamex.colormode,
// m_cuoparamex.mt_param.finalPeriod, m_cuoparamex.mt_param.finalPeriod,
// m_cuoparamex.mt_param.Fmin, m_cuoparamex.mt_param.Fmin,
// m_cuoparamex.mt_param.a, m_cuoparamex.mt_param.a,
// m_cuoparamex.mt_param.offset, m_cuoparamex.mt_param.offset,
// m_cuoparamex.mt_param.stepnum, m_cuoparamex.mt_param.stepnum,
// m_cuoparamex.mt_param.finalDelay); m_cuoparamex.mt_param.finalDelay);
delays_forward.clear(); 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, delays_forward = speedup_cfg(m_cuoparamex.mt_param.finalPeriod, m_cuoparamex.mt_param.Fmin, m_cuoparamex.mt_param.stepnum, m_cuoparamex.mt_param.a,

View File

@ -291,7 +291,6 @@ FsmState *ScanningState::on_event(ScanEvent event)
scanner->SetIsDoublePaper(true); scanner->SetIsDoublePaper(true);
scanner->emergency_stop(1); scanner->emergency_stop(1);
LOG("\nScanningState S_EVT_DOUBLEPAPER %s \n",GetCurrentTimeStamp(2).c_str()); LOG("\nScanningState S_EVT_DOUBLEPAPER %s \n",GetCurrentTimeStamp(2).c_str());
writesyslog(LOG_INFO,"double paper error\n");
return FsmStateManagerEx<ErrorJamState>::GetState(); return FsmStateManagerEx<ErrorJamState>::GetState();
} }
else if (event == S_EVT_JAM_IN) else if (event == S_EVT_JAM_IN)

View File

@ -207,7 +207,7 @@ int HCamDevice::uninit_fpga()
int HCamDevice::open_device(int width , int height) int HCamDevice::open_device(int width , int height)
{ {
close_device();
v4lWidth = width;//@300dpi 5184 @600dpi 5184*2 v4lWidth = width;//@300dpi 5184 @600dpi 5184*2
v4lHeight = height ;//* 3;//color_h/gray_h = 3 比如目标复原图像高度为128 则灰度需要FPGA采集128 彩色采集128*3 v4lHeight = height ;//* 3;//color_h/gray_h = 3 比如目标复原图像高度为128 则灰度需要FPGA采集128 彩色采集128*3
@ -673,7 +673,7 @@ int HCamDevice::init_capture()
camera_print(" fmt.fmt.pix.width = %d\n", fmt.fmt.pix_mp.width); camera_print(" fmt.fmt.pix.width = %d\n", fmt.fmt.pix_mp.width);
camera_print(" fmt.fmt.pix.height = %d\n", fmt.fmt.pix_mp.height); camera_print(" fmt.fmt.pix.height = %d\n", fmt.fmt.pix_mp.height);
camera_print(" fmt.fmt.pix.field = %d\n", fmt.fmt.pix_mp.field); camera_print(" fmt.fmt.pix.field = %d\n", fmt.fmt.pix_mp.field);
// close(videofd); close_device();
return -1; return -1;
} }
@ -1363,7 +1363,7 @@ void HCamDevice::HtCamResizeBuffer(int width, int height, int number)
v4lHeight = height; v4lHeight = height;
v4lBufferCount = number; v4lBufferCount = number;
HtCamExitVideoCapturing(); close_device();
init_sample(); init_sample();
init_capture(); init_capture();
init_video_buffer(); init_video_buffer();

View File

@ -80,6 +80,9 @@ void MultiFrameCapture::SetParent(void *scanner)
void MultiFrameCapture::open() void MultiFrameCapture::open()
{ {
printf("open-------\r\n");
//stop_countdown();
printf("open close-------\r\n");
int ret = video->open_device(v4l2_width_,v4l2_height_); int ret = video->open_device(v4l2_width_,v4l2_height_);
if(ret < -1) if(ret < -1)
return; return;
@ -176,6 +179,11 @@ SIZE MultiFrameCapture::GetPaperSize(PaperSize paper, int dpi)
void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config) void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
{ {
m_config = config; m_config = config;
printf("config.params.slow_moire:%d\r\n",config.params.slow_moire);
if(config.params.slow_moire && config.params.dpi != 3)
{
config.params.dpi = 2;
}
if (!video.get()) if (!video.get())
{ {
@ -213,6 +221,22 @@ void MultiFrameCapture::UpdateScanParam(HG_ScanConfiguration config)
{ {
int val = config.params.dpi == 3 ? 600 :(config.params.dpi == 2?300:200); int val = config.params.dpi == 3 ? 600 :(config.params.dpi == 2?300:200);
printf("val = %d\r\n",val); printf("val = %d\r\n",val);
//除摩尔纹模式
if(config.params.slow_moire && config.params.dpi != 3)
{
int sp = fpgaparam.Sp - 538;
val = 400;
video->HtCamSetSpTime(sp,49); // 2344 灰色 //2023-8-10 最新2650
if (color_mode_)
{
video->HtCamSetSpTime2(sp * 3);
}
printf("摩尔纹高度 = %d\r\n",val);
printf("灰度sp = %d\r\n",sp);
printf("彩色sp = %d\r\n",sp * 3);
}
uint32_t cnt = compute_frame(paper_size_ , val) ; uint32_t cnt = compute_frame(paper_size_ , val) ;
if (m_config.params.dpi == 2 && m_config.params.pageSize == (int)PaperSize::G400_A4) if (m_config.params.dpi == 2 && m_config.params.pageSize == (int)PaperSize::G400_A4)
{ {
@ -763,7 +787,12 @@ bool MultiFrameCapture::saveLutImg(int dpi, int mode, bool black)
{ {
int k = (3 * s + x); int k = (3 * s + x);
// int diff = LIGHT_DIFF(*((double *)values + k)); // int diff = LIGHT_DIFF(*((double *)values + k));
int diff = 210 - *((double *)values + k);;//param.MaxBright - *((double *)values + k); int diff;//= 240 - *((double *)values + k);;//param.MaxBright - *((double *)values + k);
if(x==0)
diff = 190 - *((double *)values + k);
else
diff = 240 - *((double *)values + k);
log += " 明场:" + std::to_string(k) + ";diff" + std::to_string(diff) + "\r\n"; log += " 明场:" + std::to_string(k) + ";diff" + std::to_string(diff) + "\r\n";
double step = diff * radio; double step = diff * radio;

View File

@ -33,37 +33,26 @@ Scanner::Scanner(ScannerGlue glue)
capturer->SetParent(this); capturer->SetParent(this);
//固件版本 //固件版本
int version=7010; int version=7010;
fpgacontrol fc(version);
if (fc.ifneedupdatefpga())
{
if (fc.updatefpga())
{
system("poweroff");
}
else
{
LOG("error error update fpga error");
}
}
auto btnevent = [this](const int eventtype) auto btnevent = [this](const int eventtype)
{ {
if (!IsScanning()) //未扫描 if (!IsScanning()) //未扫描
{ {
if (eventtype == BTN_LOW_POWER) switch (eventtype)
{ {
//system("echo mem > /sys/power/state"); case BTN_LOW_POWER:
//capturer->SetLowPower(0); stop_countdown();
system("/mnt/flash-disk/low_power.sh 1"); system("sh /mnt/flash-disk/low_power.sh 1");
} break;
else if (eventtype == BTN_START) case BTN_NORMAL_POWER:
{ system("sh /mnt/flash-disk/low_power.sh 0");
// put(S_EVT_START_SCAN); start_enter_lowpwoer();
} break;
else if(eventtype == BTN_NORMAL_POWER) case BTN_START:
{ /* code */
//capturer->SetLowPower(1); break;
system("/mnt/flash-disk/low_power.sh 0"); default:
break;
} }
} }
else //扫描中 else //扫描中
@ -71,7 +60,7 @@ Scanner::Scanner(ScannerGlue glue)
if (eventtype == BTN_STOP) if (eventtype == BTN_STOP)
{ {
put(S_EVT_STOP_SCAN); put(S_EVT_STOP_SCAN);
LOG("BTN_STOP put(S_EVT_STOP_SCAN)"); printf("keyboard cancel scan\r\n");
} }
} }
}; };
@ -117,9 +106,13 @@ void Scanner::updateSpeedMode(int speed)
unsigned int t_dpi = m_config.params.dpi; unsigned int t_dpi = m_config.params.dpi;
if(typeid(*capturer)==typeid(MultiFrameCapture)) if(typeid(*capturer)==typeid(MultiFrameCapture))
if(m_config.params.pageSize == 17 || m_config.params.pageSize == 19) //长文稿采用600dpi模式扫描 if(m_config.params.pageSize == 17 || m_config.params.pageSize == 19 ) //长文稿采用600dpi模式扫描
t_dpi = 3; t_dpi = 3;
if (m_config.params.slow_moire) //摩尔纹使用300dpi进行采集
{
t_dpi = 2;
}
motorCuozhi.speedChange(m_scaninfo.SpeedMode, t_dpi,m_config.params.isColor); motorCuozhi.speedChange(m_scaninfo.SpeedMode, t_dpi,m_config.params.isColor);
motorZouzhi.speedChange(m_scaninfo.SpeedMode, t_dpi,m_config.params.isColor); motorZouzhi.speedChange(m_scaninfo.SpeedMode, t_dpi,m_config.params.isColor);
} }
@ -129,6 +122,7 @@ void Scanner::startScan()
if (threadRunScan.joinable()) if (threadRunScan.joinable())
threadRunScan.join(); threadRunScan.join();
stop_countdown(); stop_countdown();
this_thread::sleep_for(std::chrono::milliseconds(200));
updateSpeedMode(4); updateSpeedMode(4);
// //开始进行扫描 // //开始进行扫描
threadRunScan = std::thread(&Scanner::runScan, this); threadRunScan = std::thread(&Scanner::runScan, this);
@ -256,7 +250,6 @@ void Scanner::runScan()
m_jamIn = true; m_jamIn = true;
put(S_EVT_JAM_IN); put(S_EVT_JAM_IN);
m_scaninfo.JamInNum++; m_scaninfo.JamInNum++;
//writesyslog(LOG_INFO, "paper jam in error \n");
} }
break; break;
} }

View File

@ -144,7 +144,6 @@ UsbScanner::UsbScanner() : m_startscan(false),
if (eventID == (int)HG_ScannerStatus::STOP_SCAN) if (eventID == (int)HG_ScannerStatus::STOP_SCAN)
{ {
m_startscan = false; m_startscan = false;
writesyslog(LOG_INFO, getmeminfo());
} }
if (eventID == (int)(HG_ScannerStatus::AUTO_FLAT_FINISHED)) if (eventID == (int)(HG_ScannerStatus::AUTO_FLAT_FINISHED))
{ {
@ -179,7 +178,7 @@ void UsbScanner::StartScan(int scancount)
{ {
ClearImages(); ClearImages();
ClearErrorEvents(); ClearErrorEvents();
m_hgScanner->SetDstScanNum(9999);//scancount <= 0 ? 1 : scancount); m_hgScanner->SetDstScanNum(scancount <= 0 ? 1 : scancount);
m_hgScanner->put(S_EVT_START_SCAN); m_hgScanner->put(S_EVT_START_SCAN);
} }
@ -400,7 +399,7 @@ void UsbScanner::UpdateScanInfo(int type, void *data)
info.SleepTime = *(unsigned int *)(data); info.SleepTime = *(unsigned int *)(data);
printf("set sleep time = %d \n", info.SleepTime); printf("set sleep time = %d \n", info.SleepTime);
SaveScaninfo(info); SaveScaninfo(info);
stop_countdown(); //stop_countdown();
start_enter_lowpwoer(); start_enter_lowpwoer();
return; return;
case USBCommand::SET_SPEED_MODE: case USBCommand::SET_SPEED_MODE:

View File

@ -32,16 +32,16 @@ void ZouZhiMotor::speedRecover()
void ZouZhiMotor::speedConfig() void ZouZhiMotor::speedConfig()
{ {
// printf("ZouZhiMotor 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 ", printf("ZouZhiMotor 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_zouparamex.speed, m_zouparamex.speed,
// m_zouparamex.dpi, m_zouparamex.dpi,
// m_zouparamex.colormode, m_zouparamex.colormode,
// m_zouparamex.mt_param.finalPeriod, m_zouparamex.mt_param.finalPeriod,
// m_zouparamex.mt_param.Fmin, m_zouparamex.mt_param.Fmin,
// m_zouparamex.mt_param.a, m_zouparamex.mt_param.a,
// m_zouparamex.mt_param.offset, m_zouparamex.mt_param.offset,
// m_zouparamex.mt_param.stepnum, m_zouparamex.mt_param.stepnum,
// m_zouparamex.mt_param.finalDelay); m_zouparamex.mt_param.finalDelay);
delays.clear(); delays.clear();

View File

@ -31,15 +31,8 @@ start(){
done done
if [ $SEC -gt 0 ] ; then if [ $SEC -gt 0 ] ; then
#echo freeze > /sys/power/state sh /mnt/flash-disk/low_power.sh 1
echo sleep > /etc/kernel_state
pkill scanservice
/etc/usbmonitor &
/etc/pm_control off
echo 0 > /sys/class/leds/red/brightness
echo 0 > /sys/class/leds/white/brightness
echo 0 > /sys/class/leds/green/brightness
echo 1 > /sys/class/leds/green/brightness
fi fi
} }

View File

@ -1 +1,11 @@
ps -efww|grep countdown |grep -v grep|cut -c 9-15|xargs kill -9 #!/bin/bash
ID=`PS -EF | grep countdown.sh | grep -v grep |awk '{printf $2}'`
echo $ID
for id in $ID
do
kill -9 $id
echo "kill $id"
done

View File

@ -228,7 +228,7 @@ int main(int argc, char *argv[])
{ {
exit(-1); exit(-1);
} }
creat_sleep_fifo();
init_get_CISType_GPIO(); init_get_CISType_GPIO();
initscanner(); initscanner();
start_enter_lowpwoer(); start_enter_lowpwoer();
@ -323,7 +323,6 @@ int main(int argc, char *argv[])
auto data = m_scanner->GetEvent(); auto data = m_scanner->GetEvent();
if (data.code == (int)(HG_ScannerStatus::STOP_SCAN)) if (data.code == (int)(HG_ScannerStatus::STOP_SCAN))
{ {
system("cpufreq-set -g ondemand");
printf("关闭V4L2 4444\r\n"); printf("关闭V4L2 4444\r\n");
m_scanner->close_v4l2(); m_scanner->close_v4l2();
} }
@ -355,16 +354,6 @@ int main(int argc, char *argv[])
if (info.pJpegData != nullptr && info.DataLength != 0) if (info.pJpegData != nullptr && info.DataLength != 0)
{ {
int tt = m_scanner->write_bulk((void *)&info, sizeof(int) * 8); int tt = m_scanner->write_bulk((void *)&info, sizeof(int) * 8);
//printf("USB传输第一次write_bulk时间 :%f \r\n",sw.elapsed_ms());
// tt = m_scanner->write_bulk(info.pJpegData, info.DataLength);
// //free(info.pJpegData);
// printf("USB传输第二次write_bulk时间 :%f \r\n",sw.elapsed_ms());
// break;
// tt = m_scanner->write_bulk(info.mat.data, info.DataLength);
// free(info.pJpegData);
// break;
// LOG("GET_IMAGE info.pJpegData =%p info.DataLength=%d \n", info.pJpegData, info.DataLength);
int index = 0; int index = 0;
int total = info.DataLength; int total = info.DataLength;
while (total > 0) while (total > 0)
@ -376,31 +365,19 @@ int main(int argc, char *argv[])
total = 0; // jpeg图像小于1MB 则一次传输 total = 0; // jpeg图像小于1MB 则一次传输
} }
else // 压缩大于1MB的图像 分包传输 else // 压缩大于1MB的图像 分包传输
{
total -= dstlength; total -= dstlength;
}
int tt = m_scanner->write_bulk(info.pJpegData + index, dstlength); int tt = m_scanner->write_bulk(info.pJpegData + index, dstlength);
//printf("USB传输第二次write_bulk时间 :%f \r\n",sw.elapsed_ms());
// printf("write_bulk info.pJpegData+index = %p index = %d dstlength =%d tt = %d \n", info.pJpegData + index, index, dstlength, tt);
if (tt <= -1) if (tt <= -1)
{ {
LOG("FAIL GET_IMAGE write bulk data error\n"); LOG("FAIL GET_IMAGE write bulk data error\n");
// writesyslog(LOG_WARNING, "usb write_bulk error,lost image!");
break; break;
} }
else else
index += tt; index += tt;
} }
//dnasfree(info.pJpegData);
//tjFree(info.pJpegData);
//LOG("Free info.pJpegData done\n");
if (info.dpi)
{
free(info.pJpegData);
}
sw1.reset(); sw1.reset();
printf("USB传输一帧第[%d]次时间 :%f \r\n",indx,sw.elapsed_ms()); printf("USB传输一帧第[%d]次时间 :%f \r\n",indx,sw.elapsed_ms());
indx++; indx++;
@ -409,11 +386,8 @@ int main(int argc, char *argv[])
break; break;
case USBCommand::START_COMMAND: case USBCommand::START_COMMAND:
{ {
system("cpufreq-set -g performance");
LOG("start scan scancount = %d\n", usbcb.Data); LOG("start scan scancount = %d\n", usbcb.Data);
m_scanner->StartScan(usbcb.Data); m_scanner->StartScan(usbcb.Data);
std::string loginfo = "start scan dst scan num = " + to_string(usbcb.Data) + "\n";
writesyslog(LOG_INFO, loginfo);
} }
break; break;
case USBCommand::STOP: case USBCommand::STOP:
@ -434,7 +408,6 @@ int main(int argc, char *argv[])
config.value = usbcb.Data; config.value = usbcb.Data;
m_scanner->ConfigScanParam(config); m_scanner->ConfigScanParam(config);
std::string loginfo = "config scanner config data = " + to_string(usbcb.Data) + "\n"; std::string loginfo = "config scanner config data = " + to_string(usbcb.Data) + "\n";
writesyslog(LOG_INFO, loginfo);
LOG("CONFIGURED_DATA data = %d \n", config.value); LOG("CONFIGURED_DATA data = %d \n", config.value);
} }
break; break;
@ -534,9 +507,8 @@ int main(int argc, char *argv[])
// break; // break;
case USBCommand::PRE_UPGRADE: case USBCommand::PRE_UPGRADE:
{ {
writesyslog(LOG_INFO, "start updating system\n");
LOG("start PRE_UPGRADE \n"); LOG("start PRE_UPGRADE \n");
updatePkg.open("/usr/local/update.zip", ios::out | ios::binary); updatePkg.open("/home/root/update.zip", ios::out | ios::binary);
m_scanner->SetLEDStatus(LedStatus::Updating); m_scanner->SetLEDStatus(LedStatus::Updating);
total_length = usbcb.Length; total_length = usbcb.Length;
} }
@ -569,18 +541,12 @@ int main(int argc, char *argv[])
this_thread::sleep_for(std::chrono::seconds(10)); this_thread::sleep_for(std::chrono::seconds(10));
m_scanner->SetLEDStatus(LedStatus::UpdateDone); m_scanner->SetLEDStatus(LedStatus::UpdateDone);
updatePkg.close(); updatePkg.close();
system("cp /usr/local/update.zip /userdata/update.zip -f"); system("sh /mnt/flash-disk/upgrade_firmware.sh");
system("rm -rf /usr/local/update.zip");
// m_scanner->SetLEDStatus(LedStatus::Ready);
// this_thread::sleep_for(std::chrono::seconds(3));
// total_length = 0;
// writesyslog(LOG_INFO, "update system finished\n");
// system("reboot");
} }
break; break;
case USBCommand::REBOOT: case USBCommand::REBOOT:
{ {
writesyslog(LOG_INFO, "scanservices aquired reboot\n");
if (usbcb.Data == 0) if (usbcb.Data == 0)
system("reboot"); system("reboot");
else else
@ -622,7 +588,6 @@ int main(int argc, char *argv[])
if (tt == -1) if (tt == -1)
{ {
LOG("GET_LOG_FILES_INFO write bulk data error\n"); LOG("GET_LOG_FILES_INFO write bulk data error\n");
writesyslog(LOG_WARNING, "usb write_bulk error,lost log data!");
break; break;
} }
else else
@ -635,7 +600,7 @@ int main(int argc, char *argv[])
break; break;
case USBCommand::GET_UPDATE_RESULT: case USBCommand::GET_UPDATE_RESULT:
{ {
fstream updateResult("/userdata/md5_result.log"); fstream updateResult("/mnt/flash-disk/updata_status.txt");
if (!updateResult.is_open()) if (!updateResult.is_open())
usbcb.Data = 0; usbcb.Data = 0;
else else
@ -643,19 +608,18 @@ int main(int argc, char *argv[])
updateResult >> usbcb.Data; updateResult >> usbcb.Data;
updateResult.close(); updateResult.close();
} }
printf("usbcb.Data:%d\r\n",usbcb.Data);
m_scanner->write_bulk(&usbcb, sizeof(usbcb)); m_scanner->write_bulk(&usbcb, sizeof(usbcb));
this_thread::sleep_for(std::chrono::milliseconds(1000)); this_thread::sleep_for(std::chrono::milliseconds(1000));
if (usbcb.Data == 2) if (usbcb.Data == 0)
system("reboot"); system("reboot");
else if (usbcb.Data == 3)
system("update ota /userdata/updatefile/update.img");
} }
break; break;
case USBCommand::CLEAR_LOG_FILES: case USBCommand::CLEAR_LOG_FILES:
{ {
system("echo \"\" > /var/log/syslog"); system("echo \"\" > /var/log/syslog");
writesyslog(LOG_WARNING, "clear /var/log/syslog contents!");
} }
break; break;
case USBCommand::GET_SCANN_NUM: case USBCommand::GET_SCANN_NUM:
@ -700,8 +664,15 @@ int main(int argc, char *argv[])
break; break;
case USBCommand::ACTIVE_SCANNER: case USBCommand::ACTIVE_SCANNER:
{ {
usbcb.Data = 0x10; int ret = get_devs_status(SLEEP_STATUS_PATH);
printf("sleep status :%d\r\n",ret);
usbcb.Data = ret == SCANNER_ERR_SLEEP ? 0x100 : 0x10;
m_scanner->write_bulk(&usbcb, sizeof(usbcb)); m_scanner->write_bulk(&usbcb, sizeof(usbcb));
if (ret == SCANNER_ERR_SLEEP)
{
system("sh /mnt/flash-disk/low_power.sh 0");
}
} }
break; break;
case USBCommand::SET_USB_INFOR_VIDPID: case USBCommand::SET_USB_INFOR_VIDPID:
@ -712,9 +683,6 @@ int main(int argc, char *argv[])
info.VID = t_vidpid.VID; info.VID = t_vidpid.VID;
info.PID = t_vidpid.PID; info.PID = t_vidpid.PID;
SaveScaninfo(info); SaveScaninfo(info);
string usbvidpid = "/etc/mdfusbconfig " + to_string(t_vidpid.VID) + " " + to_string(t_vidpid.PID);
LOG("SET_USB_INFOR_VIDPID + %s \n", usbvidpid.c_str());
system(usbvidpid.c_str());
} }
break; break;
case USBCommand::GET_USB_INFOR_VIDPID: case USBCommand::GET_USB_INFOR_VIDPID:
@ -791,7 +759,6 @@ int main(int argc, char *argv[])
std::string lut_path = "/mnt/flash-disk/huago/lut" + std::to_string(dpi) + mode + is_white_lut + ".bmp"; std::string lut_path = "/mnt/flash-disk/huago/lut" + std::to_string(dpi) + mode + is_white_lut + ".bmp";
lut_item.open(lut_path, std::ios_base::in | std::ios_base::binary); lut_item.open(lut_path, std::ios_base::in | std::ios_base::binary);
if (!lut_item.is_open()) if (!lut_item.is_open())
{ {
flatinfo.params.datalen = 0; flatinfo.params.datalen = 0;
@ -825,9 +792,10 @@ int main(int argc, char *argv[])
flatinfo.params.datalen = 0; flatinfo.params.datalen = 0;
flatinfo.params.status = 3; // 未知dpi flatinfo.params.status = 3; // 未知dpi
} }
usbcb.Data = flatinfo.value; usbcb.Data = flatinfo.value;
printf("flatinfo.params.status:%d flatinfo.params.datalen:%d flatinfo.value:%d\r\n",flatinfo.params.status,flatinfo.params.datalen,flatinfo.value); printf("flatinfo.params.status:%d\r\n" ,flatinfo.params.status);
printf("flatinfo.params.datalen:%d\r\n" ,flatinfo.params.datalen);
printf("flatinfo.value:%d\r\n",flatinfo.value);
m_scanner->write_bulk(&usbcb, sizeof(usbcb)); m_scanner->write_bulk(&usbcb, sizeof(usbcb));
if (lut_buffer) if (lut_buffer)
@ -852,6 +820,5 @@ int main(int argc, char *argv[])
LOG("reset scanner \n"); LOG("reset scanner \n");
LOG("reset usb \n"); LOG("reset usb \n");
LOG("scanservice exit \n"); LOG("scanservice exit \n");
writesyslog(LOG_INFO, "usb disconnect! scanservices exit now");
return 0; return 0;
} }

View File

@ -236,7 +236,7 @@ static std::map<PaperSize,int> paperHeight={
union HG_ScanConfiguration union HG_ScanConfiguration
{ {
struct struct
{ {
unsigned int pageSize : 5; unsigned int pageSize : 5;
unsigned int isColor : 1; unsigned int isColor : 1;
@ -246,7 +246,8 @@ union HG_ScanConfiguration
unsigned int enableLed : 1; unsigned int enableLed : 1;
unsigned int enableSizeDetect : 1; unsigned int enableSizeDetect : 1;
unsigned int lutmode : 1 ; unsigned int lutmode : 1 ;
unsigned int reversed1 : 4; unsigned int slow_moire : 1;
unsigned int reversed1 : 3;
unsigned int isCorrect : 1; unsigned int isCorrect : 1;
unsigned int dstHeight : 8; unsigned int dstHeight : 8;
unsigned int reversed2 : 6; unsigned int reversed2 : 6;
@ -358,3 +359,16 @@ union FLAT_INFO
}params; }params;
unsigned int value; 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, //设备更新:解压失败
};

View File

@ -17,6 +17,9 @@
#define LUT_COLOR_LUT_PATH "/usr/local/huago/color_lut.bmp" #define LUT_COLOR_LUT_PATH "/usr/local/huago/color_lut.bmp"
#define LUT_GRAY_LUT_PATH "/usr/local/huago/gray_lut.bmp" #define LUT_GRAY_LUT_PATH "/usr/local/huago/gray_lut.bmp"
static std::unique_ptr<TypeIO> g_sTypeio; static std::unique_ptr<TypeIO> g_sTypeio;
//using namespace cv; //using namespace cv;
@ -358,22 +361,32 @@ std::string getmeminfo()
void start_enter_lowpwoer() void start_enter_lowpwoer()
{ {
#ifdef ENABLE_LOWPOWERMODE #ifdef ENABLE_LOWPOWERMODE
// int seconds=900; // // stop_countdown();
// auto scaninfo= js_config.GetScanInfo(); // int seconds=900;
// if(scaninfo.SleepTime<0||scaninfo.SleepTime<180) // auto scaninfo= js_config.GetScanInfo();
// seconds=180; // if(scaninfo.SleepTime<0||scaninfo.SleepTime<180)
// else // seconds=180;
// seconds=scaninfo.SleepTime; // else
// std::string str="sh /etc/countdown.sh start 0 0 "+std::to_string(seconds)+" &"; // seconds=scaninfo.SleepTime;
// LOG("start_enter_lowpwoer %s \n",str.c_str()); // std::string str="sh /mnt/flash-disk/countdown.sh start 0 0 "+std::to_string(seconds) + " &";
// system(str.c_str()); // printf("start_enter_lowpwoer %s \n",str.c_str());
// int ret = system(str.c_str());
printf("system start_enter_lowpwoer :%d\r\n",true);
write_sleep_fifo(true);
#endif #endif
} }
void stop_countdown() void stop_countdown()
{ {
#ifdef ENABLE_LOWPOWERMODE #ifdef ENABLE_LOWPOWERMODE
system("sh /etc/hgkilltimer.sh"); // int ret = system("sh /mnt/flash-disk/killtimer.sh");
// printf("system stop_countdown :%d\r\n",ret);
//sleep(2);
printf("stop_countdown :%d\r\n",false);
write_sleep_fifo(false);
#endif #endif
} }
@ -401,4 +414,54 @@ SMBType GetSMBType()
{ if(!g_sTypeio.get()) { if(!g_sTypeio.get())
g_sTypeio = std::make_unique<TypeIO>(CIS_T_S0, CIS_T_S1, CIS_T_S2, CIS_T_S3); g_sTypeio = std::make_unique<TypeIO>(CIS_T_S0, CIS_T_S1, CIS_T_S2, CIS_T_S3);
return g_sTypeio->GetMotorType(); return g_sTypeio->GetMotorType();
}
int creat_sleep_fifo()
{
if (access("/home/root/dev/", F_OK) == -1)
{
system("mkdir /home/root/dev/");
}
int ret = mkfifo("/home/root/dev/sleep", 0666);
if (!ret)
{
perror("mkfifo");
}
sleep_fd_ = open("/home/root/dev/sleep", O_WRONLY);
if(sleep_fd_ < 0)
{
perror("open fifo fail");
}
return sleep_fd_;
}
int write_sleep_fifo(int status)
{
if(sleep_fd_ < 0)
{
perror("write_sleep_fifo open fifo fail");
return sleep_fd_;
}
char buffer[12];
sprintf(buffer,"%d",status);
printf("status:%d\r\n",status);
int ret = write(sleep_fd_,buffer,strlen(buffer));
return ret;
}
//睡眠状态 //更新状态 等等
int get_devs_status(std::string filename)
{
std::ifstream in;
in.open(filename.c_str(),ios::in);
if (!in.is_open())
{
return -1;
}
char buf[1024] = { 0 };
in >> buf;
return atoi(buf);
} }

View File

@ -9,6 +9,7 @@
//static cv::Mat lutoldGrayMat; //灰色校正值 //static cv::Mat lutoldGrayMat; //灰色校正值
//static cv::Mat lutoldColorMat; //彩色校正值 //static cv::Mat lutoldColorMat; //彩色校正值
static JsonConfig js_config; static JsonConfig js_config;
static int sleep_fd_ = 0;
//cv::Mat extractRepresentRow(const cv::Mat& src); //cv::Mat extractRepresentRow(const cv::Mat& src);
@ -48,3 +49,7 @@ CISVendor GetCisType();
/*获取扫描板类型*/ /*获取扫描板类型*/
SMBType GetSMBType(); SMBType GetSMBType();
int creat_sleep_fifo();
int write_sleep_fifo(int status);
int get_devs_status(std::string filename);