Merge branch 'master' of http://192.168.10.5:8099/huagao/zynq_7010
This commit is contained in:
commit
c48acfbbdc
119
main.cpp
119
main.cpp
|
@ -34,7 +34,7 @@
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//shared_ptr<HGUsb> m_usb;
|
// shared_ptr<HGUsb> m_usb;
|
||||||
shared_ptr<UsbScanner> m_scanner;
|
shared_ptr<UsbScanner> m_scanner;
|
||||||
ofstream updatePkg;
|
ofstream updatePkg;
|
||||||
static unsigned int total_length = 0;
|
static unsigned int total_length = 0;
|
||||||
|
@ -265,7 +265,7 @@ int main(int argc, char *argv[])
|
||||||
stop_countdown();
|
stop_countdown();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
USBCB usbcb = {0};
|
USBCB usbcb = {0};
|
||||||
m_scanner->read_bulk(&usbcb, sizeof(usbcb));
|
m_scanner->read_bulk(&usbcb, sizeof(usbcb));
|
||||||
if (usbcb.Command == 0)
|
if (usbcb.Command == 0)
|
||||||
|
@ -280,17 +280,17 @@ int main(int argc, char *argv[])
|
||||||
case USBCommand::GET_DSP_STATUS:
|
case USBCommand::GET_DSP_STATUS:
|
||||||
{
|
{
|
||||||
USBCB sts = {1, 0, 0};
|
USBCB sts = {1, 0, 0};
|
||||||
if (m_scanner->IsScanning()) //队列不为空
|
if (m_scanner->IsScanning()) // 队列不为空
|
||||||
{
|
{
|
||||||
|
|
||||||
if (m_scanner->GetImagequeueEmpty())
|
if (m_scanner->GetImagequeueEmpty())
|
||||||
{
|
{
|
||||||
//LOG("GetImagequeueEmpty\n");
|
// LOG("GetImagequeueEmpty\n");
|
||||||
auto evt = m_scanner->GetEventFront();
|
auto evt = m_scanner->GetEventFront();
|
||||||
// if (evt != (int)HG_ScannerStatus::NORMAL && evt != (int)HG_ScannerStatus::STOP_SCAN)
|
// if (evt != (int)HG_ScannerStatus::NORMAL && evt != (int)HG_ScannerStatus::STOP_SCAN)
|
||||||
if (evt.code != (int)HG_ScannerStatus::NORMAL && evt.code != (int)HG_ScannerStatus::STOP_SCAN)
|
if (evt.code != (int)HG_ScannerStatus::NORMAL && evt.code != (int)HG_ScannerStatus::STOP_SCAN)
|
||||||
{
|
{
|
||||||
sts.Data = m_scanner->GetEvent().code; //确保第一张扫描之前所发生的异常事件能够被通知
|
sts.Data = m_scanner->GetEvent().code; // 确保第一张扫描之前所发生的异常事件能够被通知
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -299,7 +299,7 @@ int main(int argc, char *argv[])
|
||||||
int evt = m_scanner->GetEventFront().code;
|
int evt = m_scanner->GetEventFront().code;
|
||||||
if (evt != (int)HG_ScannerStatus::NORMAL && evt != (int)HG_ScannerStatus::STOP_SCAN)
|
if (evt != (int)HG_ScannerStatus::NORMAL && evt != (int)HG_ScannerStatus::STOP_SCAN)
|
||||||
{
|
{
|
||||||
sts.Data = m_scanner->GetEvent().code; //扫描中途的事件能够被通知
|
sts.Data = m_scanner->GetEvent().code; // 扫描中途的事件能够被通知
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -311,7 +311,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//LOG("Scanning not scanning \n");
|
// LOG("Scanning not scanning \n");
|
||||||
if (!m_scanner->GetImagequeueEmpty())
|
if (!m_scanner->GetImagequeueEmpty())
|
||||||
{
|
{
|
||||||
HG_JpegCompressInfo info = m_scanner->GetFrontImage();
|
HG_JpegCompressInfo info = m_scanner->GetFrontImage();
|
||||||
|
@ -340,22 +340,21 @@ int main(int argc, char *argv[])
|
||||||
case USBCommand::GET_IMAGE:
|
case USBCommand::GET_IMAGE:
|
||||||
{
|
{
|
||||||
HG_JpegCompressInfo info = m_scanner->GetImage();
|
HG_JpegCompressInfo info = m_scanner->GetImage();
|
||||||
|
|
||||||
//sw.reset();
|
// sw.reset();
|
||||||
if (info.pJpegData != nullptr && info.DataLength != 0)
|
if (info.pJpegData != nullptr && info.DataLength != 0)
|
||||||
{
|
{
|
||||||
int tt = m_scanner->write_bulk((void*)&info, sizeof(int)*7);
|
int tt = m_scanner->write_bulk((void *)&info, sizeof(int) * 7);
|
||||||
|
|
||||||
//int tt = m_scanner->write_bulk(info.pJpegData, info.DataLength);
|
// int tt = m_scanner->write_bulk(info.pJpegData, info.DataLength);
|
||||||
//free(info.pJpegData);
|
// free(info.pJpegData);
|
||||||
|
|
||||||
//break;
|
|
||||||
|
|
||||||
|
// break;
|
||||||
//tt = m_scanner->write_bulk(info.mat.data, info.DataLength);
|
|
||||||
//free(info.pJpegData);
|
// tt = m_scanner->write_bulk(info.mat.data, info.DataLength);
|
||||||
//break;
|
// free(info.pJpegData);
|
||||||
//LOG("GET_IMAGE info.pJpegData =%p info.DataLength=%d \n", info.pJpegData, info.DataLength);
|
// 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)
|
||||||
|
@ -366,27 +365,27 @@ int main(int argc, char *argv[])
|
||||||
dstlength = total;
|
dstlength = total;
|
||||||
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("write_bulk info.pJpegData+index = %p index = %d dstlength =%d tt = %d \n", info.pJpegData + index, index, dstlength, tt);
|
// 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!");
|
// writesyslog(LOG_WARNING, "usb write_bulk error,lost image!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
index += tt;
|
index += tt;
|
||||||
}
|
}
|
||||||
//free(info.pJpegData);
|
// free(info.pJpegData);
|
||||||
tjFree(info.pJpegData);
|
tjFree(info.pJpegData);
|
||||||
LOG("Free info.pJpegData done\n");
|
LOG("Free info.pJpegData done\n");
|
||||||
//printf("TIME!!!!!!!!!!!!! :%f info.DataLength:%d\r\n",sw.elapsed_ms(),info.DataLength);
|
// printf("TIME!!!!!!!!!!!!! :%f info.DataLength:%d\r\n",sw.elapsed_ms(),info.DataLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -397,11 +396,10 @@ int main(int argc, char *argv[])
|
||||||
m_scanner->StartScan(usbcb.Data);
|
m_scanner->StartScan(usbcb.Data);
|
||||||
std::string loginfo = "start scan dst scan num = " + to_string(usbcb.Data) + "\n";
|
std::string loginfo = "start scan dst scan num = " + to_string(usbcb.Data) + "\n";
|
||||||
writesyslog(LOG_INFO, loginfo);
|
writesyslog(LOG_INFO, loginfo);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case USBCommand::STOP:
|
case USBCommand::STOP:
|
||||||
|
|
||||||
m_scanner->StopScan();
|
m_scanner->StopScan();
|
||||||
break;
|
break;
|
||||||
case USBCommand::GET_FW_VERSION:
|
case USBCommand::GET_FW_VERSION:
|
||||||
|
@ -442,7 +440,7 @@ int main(int argc, char *argv[])
|
||||||
case USBCommand::STOP_FLAT:
|
case USBCommand::STOP_FLAT:
|
||||||
break;
|
break;
|
||||||
case USBCommand::SEND_SERIAL:
|
case USBCommand::SEND_SERIAL:
|
||||||
if (usbcb.Length == 14) //长度必须是14
|
if (usbcb.Length == 14) // 长度必须是14
|
||||||
{
|
{
|
||||||
LOG("SET SEND_SERIAL \n");
|
LOG("SET SEND_SERIAL \n");
|
||||||
std::vector<unsigned char> str(14);
|
std::vector<unsigned char> str(14);
|
||||||
|
@ -599,7 +597,7 @@ int main(int argc, char *argv[])
|
||||||
dstlength = length;
|
dstlength = length;
|
||||||
length = 0; // jpeg图像小于1MB 则一次传输
|
length = 0; // jpeg图像小于1MB 则一次传输
|
||||||
}
|
}
|
||||||
else //压缩大于1MB的图像 分包传输
|
else // 压缩大于1MB的图像 分包传输
|
||||||
length -= dstlength;
|
length -= dstlength;
|
||||||
|
|
||||||
int tt = m_scanner->write_bulk(bufferlog + index, dstlength);
|
int tt = m_scanner->write_bulk(bufferlog + index, dstlength);
|
||||||
|
@ -734,7 +732,7 @@ int main(int argc, char *argv[])
|
||||||
jsonpath.resize(usbcb.Length);
|
jsonpath.resize(usbcb.Length);
|
||||||
m_scanner->read_bulk(&jsonpath[0], usbcb.Length);
|
m_scanner->read_bulk(&jsonpath[0], usbcb.Length);
|
||||||
LOG("get json path = %s \n", jsonpath.c_str());
|
LOG("get json path = %s \n", jsonpath.c_str());
|
||||||
if (access(jsonpath.c_str(), F_OK) == 0) //存在
|
if (access(jsonpath.c_str(), F_OK) == 0) // 存在
|
||||||
{
|
{
|
||||||
ifstream i(jsonpath);
|
ifstream i(jsonpath);
|
||||||
json j;
|
json j;
|
||||||
|
@ -754,18 +752,71 @@ int main(int argc, char *argv[])
|
||||||
m_scanner->read_bulk(&jspath[0], usbcb.Data);
|
m_scanner->read_bulk(&jspath[0], usbcb.Data);
|
||||||
LOG("save json path =%s \n", jspath.c_str());
|
LOG("save json path =%s \n", jspath.c_str());
|
||||||
m_scanner->read_bulk(&jscontent[0], usbcb.Length);
|
m_scanner->read_bulk(&jscontent[0], usbcb.Length);
|
||||||
//LOG("json content =%s \n", jscontent.c_str());
|
// LOG("json content =%s \n", jscontent.c_str());
|
||||||
auto j = json::parse(jscontent);
|
auto j = json::parse(jscontent);
|
||||||
ofstream ofs(jspath);
|
ofstream ofs(jspath);
|
||||||
ofs << std::setw(4) << j << std::endl;
|
ofs << std::setw(4) << j << std::endl;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case USBCommand::GET_FLAT_DATA:
|
||||||
|
{
|
||||||
|
FLAT_INFO *flatinfo = static_cast<FLAT_INFO *>(usbcb.Data);
|
||||||
|
unsigned char *lut_buffer;
|
||||||
|
if (flatinfo->params.dpi != 0)
|
||||||
|
{
|
||||||
|
std::ifstream lut_item;
|
||||||
|
int dpi = flatinfo->params.dpi == 0x01 ? 200 : (flatinfo->params.dpi == 0x02 ? 300 : 600);
|
||||||
|
std::string mode = flatinfo->params.colormode ? "clr" : "gray";
|
||||||
|
std::string is_white_lut = flatinfo->params.is_whiteimage ? "white" : "bw";
|
||||||
|
std::string lut_path = "/mnt/conf-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);
|
||||||
|
if (!lut_item.is_open())
|
||||||
|
{
|
||||||
|
flatinfo->params.datalen = 0;
|
||||||
|
flatinfo->params.status = 1; // 文件打开失败
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lut_item.seekg(0, std::ios::end);
|
||||||
|
size_t length = lut_item.tellg();
|
||||||
|
lut_item.seekg(0, std::ios::beg);
|
||||||
|
flatinfo->params.datalen = length
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flatinfo->params.datalen != 0)
|
||||||
|
{
|
||||||
|
lut_buffer = new unsigned char[flatinfo->params.datalen];
|
||||||
|
if (lut_buffer)
|
||||||
|
lut_item.read(lut_buffer, flatinfo->params.datalen);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flatinfo->params.status = 2; // OOM 异常
|
||||||
|
flatinfo->params.datalen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flatinfo->params.datalen = 0;
|
||||||
|
flatinfo->params.status = 3; // 未知dpi
|
||||||
|
}
|
||||||
|
|
||||||
|
usbcb.Data = flatinfo->value;
|
||||||
|
m_scanner->write_bulk(&usbcb, sizeof(usbcb));
|
||||||
|
|
||||||
|
if (lut_buffer)
|
||||||
|
{
|
||||||
|
m_scanner->write_bulk(lut_buffer, flatinfo->params.datalen);
|
||||||
|
delete[] lut_buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_scanner->ClearErrorEvents();
|
m_scanner->ClearErrorEvents();
|
||||||
m_scanner->ClearImages(); //清空内存 释放压缩数据 避免内存堆积
|
m_scanner->ClearImages(); // 清空内存 释放压缩数据 避免内存堆积
|
||||||
m_scanner.reset();
|
m_scanner.reset();
|
||||||
LOG("reset scanner \n");
|
LOG("reset scanner \n");
|
||||||
LOG("reset usb \n");
|
LOG("reset usb \n");
|
||||||
|
|
|
@ -352,3 +352,17 @@ constexpr char BULK_OUT_PATH[] = "/dev/usb-ffs/mtp/ep2";
|
||||||
constexpr char BULK_IN_PATH[] = "/dev/usb-ffs/mtp/ep1";
|
constexpr char BULK_IN_PATH[] = "/dev/usb-ffs/mtp/ep1";
|
||||||
constexpr char BULK_INT_PATH[] = "/dev/usb-ffs/mtp/ep3";
|
constexpr char BULK_INT_PATH[] = "/dev/usb-ffs/mtp/ep3";
|
||||||
constexpr char STATE_PATH[] = "/sys/class/android_usb/android0/state";
|
constexpr char STATE_PATH[] = "/sys/class/android_usb/android0/state";
|
||||||
|
|
||||||
|
union FLAT_INFO
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned int dpi:5;
|
||||||
|
unsigned int colormode:1;
|
||||||
|
unsigned int is_whiteimage:1;
|
||||||
|
unsigned int status:8;
|
||||||
|
unsigned int reversed:1;
|
||||||
|
unsigned int datalen:16;
|
||||||
|
}params;
|
||||||
|
unsigned int value;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue