This commit is contained in:
modehua 2023-09-18 19:40:47 -07:00
parent e2350a6942
commit 37ddafb4c4
5 changed files with 81 additions and 263 deletions

View File

@ -1,101 +0,0 @@
#pragma once
#include <string>
//#define Color 3
typedef enum Scan_Mode
{
SM_GRAY,
SM_COLOR
} ScanMode;
const std::string ScanPaperTypes[] =
{
"A4",
"A3"
};
const int SPTSizes[] = {1728, 1632};
typedef enum Scan_Paper_Type
{
SPT_A4,
SPT_A3
}ScanPaperType;
#ifdef A3
// 图像像素值
#define IMG_HEIGHT 3600
#define IMG_WIDTH 2592 * 2
#define SPI_COLOR 0x04501003 //0x0cf01002, 0x04501003
#define SPI_GRAY 0x0cf01002
// 300 dpi 图像宽度像素值(目前仅为双面扫描故尺寸为单面尺寸乘以2)
#define IMG_WIDTH_300DPI 3672 * 2
// 200 dpi 图像宽度像素值(目前仅为双面扫描故尺寸为单面尺寸乘以2)
#define IMG_WIDTH_200DPI 2448 * 2
#define IMG_WIDTH_150DPI 1836 * 2
#define IMG_HEIGHT_200DPI IMG_HEIGHT
#define IMG_HEIGHT_300DPI IMG_HEIGHT * 1.5
#define IMG_HEIGHT_150DPI IMG_HEIGHT * 0.75
//原始图像相对于200dpi的倍数
#define IMG_W_RADIO 1
#define IMG_H_RADIO 1
#define FRAME_COUNT 4
#else
// 300 dpi 图像宽度像素值(目前仅为双面扫描故尺寸为单面尺寸乘以2)
#define IMG_WIDTH_300DPI 2592 * 2
// 200 dpi 图像宽度像素值(目前仅为双面扫描故尺寸为单面尺寸乘以2)
#define IMG_WIDTH_200DPI 1728 * 2
#define IMG_WIDTH_150DPI 1296 * 2
#define IMG_HEIGHT_200DPI 3600
#define IMG_HEIGHT_300DPI 4050
#define IMG_HEIGHT_150DPI 2025
//原始图像相对于200dpi 系数
#define IMG_W_RADIO 1/1.5
#define IMG_H_RADIO 1
// 图像像素值
#ifdef HAS_UV
// #define SPI_COLOR 0x03D81001
// #define SPI_GRAY 0x13001000
#define SPI_COLOR 0x05181001
#define SPI_GRAY 0x19501000
// 0x19501000, 0x05181001
#else
const int SPI_SP = 0x04b0;
const int SPI_SAMPLE = 256;
const int SPI_COLOR_MODE = SM_COLOR;
const int SCAN_PAPER_TYPE = SPT_A4;
#endif
const int IMG_HEIGHT = 9000;
const int IMG_V4L_WIDTH = SPTSizes[SCAN_PAPER_TYPE];
const int FRAME_COUNT = 3;
const int TEST_FRAME = 1;
const int TEST_ENABLE = 0;
const int LED_ENABLE = 1;
const bool SAVE_ENABLE = true;
#endif

View File

@ -18,11 +18,10 @@ std::string Properties::GetProperty(const std::string& key) const {
} }
//前面把配置文件参数读取 分成key和val放入map从map取出val
std::string Properties::GetProperty(const std::string& key, const std::string& defaultValue) const { std::string Properties::GetProperty(const std::string& key, const std::string& defaultValue) const {
if (key.compare("fpga.correctColor.BOffset") == 0) if (key.compare("fpga.correctColor.BOffset") == 0)
printf("Get Config File Size (path: /usr/local/huago/ “properties” ) = %d \r\n",properties.size()); printf("Get Config File Size (path: /usr/local/huago/ <EFBFBD><EFBFBD>properties<EFBFBD><EFBFBD> ) = %d \r\n",properties.size());
if (properties.find(key) == properties.end()) { if (properties.find(key) == properties.end()) {
return defaultValue; return defaultValue;
} }
@ -34,7 +33,7 @@ std::vector<std::string> Properties::GetPropertyNames() const {
return keys; return keys;
} }
//把配置文件参数写入map //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>map
void Properties::AddProperty(const std::string& key, const std::string& value) { void Properties::AddProperty(const std::string& key, const std::string& value) {
if (properties.find(key) == properties.end()) { if (properties.find(key) == properties.end()) {
keys.push_back(key); keys.push_back(key);

View File

@ -37,7 +37,6 @@ Scanner::Scanner(ScannerGlue glue)
{ {
if (fc.updatefpga()) if (fc.updatefpga())
{ {
//system("sh /etc/reloadfpga.sh");
system("poweroff"); system("poweroff");
} }
else else
@ -77,17 +76,14 @@ Scanner::Scanner(ScannerGlue glue)
motorZouzhi.setSpeed(4000); motorZouzhi.setSpeed(4000);
motorCuozhi.setSpeed(3000); motorCuozhi.setSpeed(3000);
motorCuozhi.setDirection(false); motorCuozhi.setDirection(false);
//sensor->isPaperAtScan();
//system("cat /sys/class/gpio/gpio226/value");
//sensor->enableDoubleSensor(true);
std::this_thread::sleep_for(std::chrono::milliseconds(50)); std::this_thread::sleep_for(std::chrono::milliseconds(50));
//sensor->enableDoubleSensor(false);
FsmState::setScanner(this); FsmState::setScanner(this);
threadRunMessageLoop = std::thread(&Scanner::runMessageLoop, this); threadRunMessageLoop = std::thread(&Scanner::runMessageLoop, this);
Motor::enablePower(true); Motor::enablePower(true);
this_thread::sleep_for(std::chrono::milliseconds(200)); this_thread::sleep_for(std::chrono::milliseconds(200));
//meminfo = MemoryInfo::GetInstance();
//GetSysInfo();
} }
Scanner::~Scanner() Scanner::~Scanner()
@ -111,18 +107,11 @@ void Scanner::updateSpeedMode(int speed)
m_scaninfo.SpeedMode=3; m_scaninfo.SpeedMode=3;
printf("速度模式:%d dpi:%d 颜色:%d \n",m_scaninfo.SpeedMode,m_config.params.dpi,m_config.params.isColor); printf("速度模式:%d dpi:%d 颜色:%d \n",m_scaninfo.SpeedMode,m_config.params.dpi,m_config.params.isColor);
unsigned int t_dpi = m_config.params.dpi; unsigned int t_dpi = m_config.params.dpi;
// if(typeid(*capturer)==typeid(MonoCapturer))
// {
// if(m_config.params.dpi==0x03&& m_scansysinfo->IsSmallRam())
// t_dpi=0x02;
// else
// 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;
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);
} }
@ -149,19 +138,15 @@ void Scanner::runMessageLoop()
while (bMsgLoop) while (bMsgLoop)
{ {
ScanEvent evt = sysEvent.Take(); ScanEvent evt = sysEvent.Take();
//LOG("\n---------------------%d--------------------------\n", evt);
fsmState = fsmState->on_event(evt); fsmState = fsmState->on_event(evt);
//printf("current fsmState =%s ",typeid(*fsmState).name());
processevent(fsmState, evt); processevent(fsmState, evt);
} }
} }
void Scanner::processevent(FsmState *fsmState, ScanEvent event) void Scanner::processevent(FsmState *fsmState, ScanEvent event)
{ {
LOG("processevent Event:%d\n", (int)event);
if (fsmState == nullptr) if (fsmState == nullptr)
{ {
LOG("processevent BBBBBBBBBBBBBB Event:%d\n", (int)event);
return; return;
} }
@ -211,20 +196,14 @@ void Scanner::runScan()
motorZouzhi.start(); motorZouzhi.start();
motorCuozhi.pauseWaitForThread(); motorCuozhi.pauseWaitForThread();
if (!isPaperInit) if (!isPaperInit)
{ {
preFeed();
preFeed();
isPaperInit = true; isPaperInit = true;
} }
this_thread::sleep_for(std::chrono::milliseconds(200)); this_thread::sleep_for(std::chrono::milliseconds(200));
imageindex = 0; imageindex = 0;
//*capturer->setFPGATriggerMode(false, 0);
//capturer->setFanMode(3);
sensor->resetPaperPin(); sensor->resetPaperPin();
@ -248,22 +227,15 @@ void Scanner::runScan()
{ {
if (!sensor->waitPaperStandBy(0)) if (!sensor->waitPaperStandBy(0))
{ {
// this_thread::sleep_for(std::chrono::milliseconds(200));
put(S_EVT_STOP_SCAN); put(S_EVT_STOP_SCAN);
LOG("STOP STOP STOP RUNSCAN \n"); LOG("STOP STOP STOP RUNSCAN \n");
} }
break; break;
} }
else
{
//LOG(" Detect Feeder loaded ,Paper Ready !!! \n");
}
sensor->enableDoubleSensor(m_config.params.doubleFeeded); sensor->enableDoubleSensor(m_config.params.doubleFeeded);
//LOG("enableDoubleSensor QQQQQQQ:%s %s\n", m_config.params.doubleFeeded ? "true" : "false",GetCurrentTimeStamp(2).c_str());
if (m_DstScannum == 0) //被取消扫描了 if (m_DstScannum == 0) //被取消扫描了
{ {
LOG("canceled canceled canceled 999999999999999999999999999999999999999999 \n");
break; break;
} }
@ -271,14 +243,12 @@ void Scanner::runScan()
if (!sensor->isPaperStandby()) if (!sensor->isPaperStandby())
{ {
put(S_EVT_STOP_SCAN); put(S_EVT_STOP_SCAN);
LOG("START SCAN LOOP STOP STOP STOP\n");
isRested = false; isRested = false;
break; break;
} }
isRested = false; isRested = false;
if (!sensor->waitPaperIn(3000))// if (!sensor->waitPaperIn(3000))//
{ {
LOG("START SCAN LOOP S_EVT_JAM_IN S_EVT_JAM_IN S_EVT_JAM_IN\n");
if (!m_isDoublePaper) if (!m_isDoublePaper)
{ {
m_glue.m_deviceevent(4, "Feed error"); m_glue.m_deviceevent(4, "Feed error");
@ -308,7 +278,6 @@ void Scanner::runScan()
max = 200; max = 200;
} }
LOG("paper pauseWaitForThread \n");
waitpapertime = 200; waitpapertime = 200;
sw2.reset(); sw2.reset();
while (!sensor->waitPaperOut(waitpapertime) && i < max) while (!sensor->waitPaperOut(waitpapertime) && i < max)
@ -321,8 +290,6 @@ void Scanner::runScan()
break; break;
} }
} }
printf("等待纸张出去?????????????%f\r\n",sw2.elapsed_ms());
LOG("paper isPaperIn \n");
if (i == max && sensor->isPaperIn()) if (i == max && sensor->isPaperIn())
{ {
@ -343,7 +310,6 @@ void Scanner::runScan()
capturer->stopsnap(b_autosize); capturer->stopsnap(b_autosize);
capturer->waitsnapdone(1);//等待采集完成 capturer->waitsnapdone(1);//等待采集完成
this_thread::sleep_for(std::chrono::milliseconds(500));//200 80ms 600 260ms this_thread::sleep_for(std::chrono::milliseconds(500));//200 80ms 600 260ms
LOG("\n ----------------EXIT 11111---------------- \n");
break; break;
} }
//LOG("\nclose double sensor %s\n",GetCurrentTimeStamp(2).c_str()); //LOG("\nclose double sensor %s\n",GetCurrentTimeStamp(2).c_str());
@ -366,8 +332,6 @@ void Scanner::runScan()
{ {
delay = 0; delay = 0;
} }
//LOG("AutoSize sleep_for delay=%d \n",delay);
this_thread::sleep_for(std::chrono::milliseconds(delay));//200 80ms 600 260ms this_thread::sleep_for(std::chrono::milliseconds(delay));//200 80ms 600 260ms
} }
if(b_autosize) if(b_autosize)
@ -387,10 +351,8 @@ void Scanner::runScan()
capturer->stopsnap(b_autosize); capturer->stopsnap(b_autosize);
break; break;
} }
//std::this_thread::sleep_for(std::chrono::milliseconds(50));
} }
LOG("\nclose b_autosize %s\n",GetCurrentTimeStamp(2).c_str());
capturer->stopsnap(b_autosize); capturer->stopsnap(b_autosize);
capturer->waitsnapdone(m_isDoublePaper || m_jamPaper);//等待采集完成 capturer->waitsnapdone(m_isDoublePaper || m_jamPaper);//等待采集完成
m_DstScannum--; m_DstScannum--;
@ -399,7 +361,6 @@ void Scanner::runScan()
if (m_DstScannum == 0) if (m_DstScannum == 0)
{ {
LOG("\n ----------------EXIT 2222 cnt=%d---------------- \n",m_DstScannum);
this_thread::sleep_for(std::chrono::milliseconds(200)); this_thread::sleep_for(std::chrono::milliseconds(200));
put(S_EVT_STOP_SCAN); put(S_EVT_STOP_SCAN);
@ -422,8 +383,6 @@ void Scanner::runScan()
printf("一张纸完成时间:%f\r\n",sw1.elapsed_ms()); printf("一张纸完成时间:%f\r\n",sw1.elapsed_ms());
if( m_config.params.dpi == 3) if( m_config.params.dpi == 3)
this_thread::sleep_for(std::chrono::milliseconds(3000)); this_thread::sleep_for(std::chrono::milliseconds(3000));
//else if( m_config.params.dpi == 1)
//this_thread::sleep_for(std::chrono::milliseconds(50));
} }
m_DstScannum = 0; m_DstScannum = 0;
@ -438,8 +397,6 @@ void Scanner::runScan()
capturer->setFanMode(0); capturer->setFanMode(0);
//capturer->close();
LOG("\n--------------------------scan done --------------------------------\n"); LOG("\n--------------------------scan done --------------------------------\n");
} }
@ -447,7 +404,6 @@ void Scanner::runScan()
void Scanner::CreatCorrectData(int correctmode) void Scanner::CreatCorrectData(int correctmode)
{ {
m_correctting = true; m_correctting = true;
LOG("\n-----------------校正模式 %d-----------------------\n",correctmode);
capturer->createCorrect(correctmode); capturer->createCorrect(correctmode);
} }
@ -463,7 +419,7 @@ void Scanner::preFeed()
std::string Scanner::GetSysInfo() std::string Scanner::GetSysInfo()
{ {
meminfo = MemoryInfo::GetInstance(); meminfo = MemoryInfo::GetInstance();
LOG(" GetSysInfo-------- \n");
auto scannerinfo = GetScanInfo(); auto scannerinfo = GetScanInfo();
auto fwverion = mapFradme_SP[scannerinfo.SpeedMode].FWVERSIO; auto fwverion = mapFradme_SP[scannerinfo.SpeedMode].FWVERSIO;
ScannerSysInfo info = { ScannerSysInfo info = {
@ -482,7 +438,7 @@ std::string Scanner::GetSysInfo()
.Have_EthernPort = 0, .Have_EthernPort = 0,
.ServiceVersion = fwverion, .ServiceVersion = fwverion,
.UsbProtocol = 1.0}; .UsbProtocol = 1.0};
LOG("FPGAVersion=%08x \n",info.FPGAVersion);
m_scansysinfo.reset(new SysInforTool(info)); m_scansysinfo.reset(new SysInforTool(info));
return m_scansysinfo->GetSysInfo(); return m_scansysinfo->GetSysInfo();
} }

View File

@ -152,43 +152,41 @@ void Sensor::monitor()
while (bMonitor) while (bMonitor)
{ {
ret = poll(&pfd, 1, 1000); ret = poll(&pfd, 1, 1000);
if (ret > 0) if (ret <= 0)
{ {
if (pfd.revents & POLLPRI) continue;
{
LOG(" ------------------------ scanpin running--------------------- \n");
lseek(pfd.fd, 0, SEEK_SET);
num = read(pfd.fd, buf, 8);
buf[num - 1] = '\0';
ret = atoi(buf);
//ftt.append_log(ret?"in":"out");
if (ret)
{
printf("检测纸张进入 time%f\r\n",sw2.elapsed_ms());
sw1.reset();
}else
{
printf("检测纸张出去 time%f\r\n",sw1.elapsed_ms());
sw2.reset();
}
edges[ret]->notify_all();
printf("\n *************scanpin %d time = %s ********* \n",ret,GetCurrentTimeStamp(2).c_str());
//sw.reset();
while(sw.elapsed_ms() < 10)
{
ret = poll(&pfd, 1, 1);
if (ret > 0)
{
num = read(pfd.fd, buf, 8);
buf[num - 1] = '\0';
ret = atoi(buf);
//printf("pMonitor nread = %d ret val = %d \n",num,ret);
}
}
}
} }
if (pfd.revents & POLLPRI)
{
lseek(pfd.fd, 0, SEEK_SET);
num = read(pfd.fd, buf, 8);
buf[num - 1] = '\0';
ret = atoi(buf);
//ftt.append_log(ret?"in":"out");
if (ret)
{
printf("检测纸张进入 time%f\r\n",sw2.elapsed_ms());
sw1.reset();
}
else
{
printf("检测纸张出去 time%f\r\n",sw1.elapsed_ms());
sw2.reset();
}
edges[ret]->notify_all();
while(sw.elapsed_ms() < 10)
{
ret = poll(&pfd, 1, 1);
if (ret > 0)
{
num = read(pfd.fd, buf, 8);
buf[num - 1] = '\0';
ret = atoi(buf);
}
}
}
} }
close(pfd.fd); close(pfd.fd);
@ -209,16 +207,12 @@ void Sensor::monitor2()
int fd = -1; int fd = -1;
char buf[8]; char buf[8];
int num; int num;
//LOG(" ------------------------ monitor2 running \n");
for (size_t i = 0; i < gpios.size(); ++i) for (size_t i = 0; i < gpios.size(); ++i)
{ {
fd = open(gpios[i]->getValuePath().c_str(), O_RDONLY); fd = open(gpios[i]->getValuePath().c_str(), O_RDONLY);
//LOG(" ------------------------ monitor2 open gpio[%d]=%s \n",i,gpios[i]->getValuePath().c_str());
if (fd < 0) if (fd < 0)
{ {
ret = -1; ret = -1;
LOG(" ------------------------ monitor2 open break \n");
break; break;
} }
@ -228,75 +222,54 @@ void Sensor::monitor2()
pollfds.push_back(pfd); pollfds.push_back(pfd);
} }
//LOG(" ------------------------ monitor2 while running \n");
if (ret >= 0) if (ret >= 0)
{ {
bMonitor2 = true; bMonitor2 = true;
while (bMonitor2) while (bMonitor2)
{ {
static int poll_t = 0;
ret = poll(&pollfds[0], pollfds.size(), 1000); ret = poll(&pollfds[0], pollfds.size(), 1000);
//LOG(" ------------------------ monitor2 while running poll_t=%d ret=%d \n",++poll_t,ret); if (ret < 0)
if (ret > 0)
{ {
for (size_t i = 0; i < pollfds.size(); ++i) continue;
}
for (size_t i = 0; i < pollfds.size(); ++i)
{
if (pollfds[i].revents)
{ {
if (pollfds[i].revents) ret = readfile(pollfds[i].fd,num,buf);
{
ret = readfile(pollfds[i].fd,num,buf);
//LOG("event id : %d i= %d \n",evts[i * 2 + ret] , i );
// if(evts[i * 2 + ret] == 272)
// {
// //LOG("\n\n---------------double paper ----------------:%s \n\n", GetCurrentTimeStamp(2).c_str());
// enableDoubleSensor(false);
// }
if (i == 2)
{
double_1 = ret;
printf("2 double_1 :%d double_2:%d\r\n",double_1,double_2);
if (double_2 && double_1 && enbale_double_)
{
printf("双张111111111111111111111111\r\n");
events.Put(ScanEvent(S_EVT_DOUBLEPAPER));
enableDoubleSensor(false);
}
else
{
//printf("3 double_1 :%d double_2:%d\r\n",double_1,double_2);
//events.Put(ScanEvent(S_EVT_NOT_DOUBLEPAPER));
}
}
if (i == 3)
{
double_2 = ret;
printf("3 double_1 :%d double_2:%d\r\n",double_1,double_2);
if (double_2 && double_1 && enbale_double_)
{
printf("双张2222222222222222222222\r\n");
events.Put(ScanEvent(S_EVT_DOUBLEPAPER));
enableDoubleSensor(false);
}
else
{
//printf("4 double_1 :%d double_2:%d\r\n",double_1,double_2);
//events.Put(ScanEvent(S_EVT_NOT_DOUBLEPAPER));
}
}
if (i != 2 && i != 3)
{
if(i == 1)
{
//LOG("paper sensor ret:%d \n", ret);
cv_paper_on.notify_all();
}
events.Put(evts[i * 2 + ret]);
}
if (i == 2)
{
double_1 = ret;
printf("2 double_1 :%d double_2:%d\r\n",double_1,double_2);
if (double_2 && double_1 && enbale_double_)
{
events.Put(ScanEvent(S_EVT_DOUBLEPAPER));
enableDoubleSensor(false);
}
} }
if (i == 3)
{
double_2 = ret;
printf("3 double_1 :%d double_2:%d\r\n",double_1,double_2);
if (double_2 && double_1 && enbale_double_)
{
events.Put(ScanEvent(S_EVT_DOUBLEPAPER));
enableDoubleSensor(false);
}
}
if (i != 2 && i != 3)
{
if(i == 1)
{
cv_paper_on.notify_all();
}
events.Put(evts[i * 2 + ret]);
}
} }
} }
} }
} }

View File

@ -25,10 +25,6 @@ using namespace std;
/*支持写入系统syslog 功能开关*/ /*支持写入系统syslog 功能开关*/
#define ENLOG_SYSLOG #define ENLOG_SYSLOG
//#define TEST_MODE
//#define __DEBUG__
//#define _LOG
#define IMAGE_COLOR 1 #define IMAGE_COLOR 1
@ -40,14 +36,9 @@ using namespace std;
#define LOG //printf #define LOG //printf
#endif #endif
#ifdef G400
#define FWVERSION "G440220112"
#define SERIALNUM "HG1060A38001P1"
#else
#define FWVERSION "G345230918" #define FWVERSION "G345230918"
#define SERIALNUM "HS6010A38001P1" #define SERIALNUM "HS6010A38001P1"
#endif
typedef struct typedef struct
{ {
int s_FRAME_COLOR_SP; int s_FRAME_COLOR_SP;