增加获取获取片上校正黑白场协议
This commit is contained in:
parent
96e71d9415
commit
bb46a72ccc
119
main.cpp
119
main.cpp
|
@ -34,7 +34,7 @@
|
|||
using json = nlohmann::json;
|
||||
using namespace std;
|
||||
|
||||
//shared_ptr<HGUsb> m_usb;
|
||||
// shared_ptr<HGUsb> m_usb;
|
||||
shared_ptr<UsbScanner> m_scanner;
|
||||
ofstream updatePkg;
|
||||
static unsigned int total_length = 0;
|
||||
|
@ -265,7 +265,7 @@ int main(int argc, char *argv[])
|
|||
stop_countdown();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
USBCB usbcb = {0};
|
||||
m_scanner->read_bulk(&usbcb, sizeof(usbcb));
|
||||
if (usbcb.Command == 0)
|
||||
|
@ -280,17 +280,17 @@ int main(int argc, char *argv[])
|
|||
case USBCommand::GET_DSP_STATUS:
|
||||
{
|
||||
USBCB sts = {1, 0, 0};
|
||||
if (m_scanner->IsScanning()) //队列不为空
|
||||
if (m_scanner->IsScanning()) // 队列不为空
|
||||
{
|
||||
|
||||
|
||||
if (m_scanner->GetImagequeueEmpty())
|
||||
{
|
||||
//LOG("GetImagequeueEmpty\n");
|
||||
// LOG("GetImagequeueEmpty\n");
|
||||
auto evt = m_scanner->GetEventFront();
|
||||
// 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)
|
||||
{
|
||||
sts.Data = m_scanner->GetEvent().code; //确保第一张扫描之前所发生的异常事件能够被通知
|
||||
sts.Data = m_scanner->GetEvent().code; // 确保第一张扫描之前所发生的异常事件能够被通知
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -299,7 +299,7 @@ int main(int argc, char *argv[])
|
|||
int evt = m_scanner->GetEventFront().code;
|
||||
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
|
||||
{
|
||||
|
@ -311,7 +311,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
else
|
||||
{
|
||||
//LOG("Scanning not scanning \n");
|
||||
// LOG("Scanning not scanning \n");
|
||||
if (!m_scanner->GetImagequeueEmpty())
|
||||
{
|
||||
HG_JpegCompressInfo info = m_scanner->GetFrontImage();
|
||||
|
@ -340,22 +340,21 @@ int main(int argc, char *argv[])
|
|||
case USBCommand::GET_IMAGE:
|
||||
{
|
||||
HG_JpegCompressInfo info = m_scanner->GetImage();
|
||||
|
||||
//sw.reset();
|
||||
|
||||
// sw.reset();
|
||||
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);
|
||||
//free(info.pJpegData);
|
||||
|
||||
//break;
|
||||
// int tt = m_scanner->write_bulk(info.pJpegData, info.DataLength);
|
||||
// free(info.pJpegData);
|
||||
|
||||
|
||||
//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);
|
||||
// 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 total = info.DataLength;
|
||||
while (total > 0)
|
||||
|
@ -366,27 +365,27 @@ int main(int argc, char *argv[])
|
|||
dstlength = total;
|
||||
total = 0; // jpeg图像小于1MB 则一次传输
|
||||
}
|
||||
else //压缩大于1MB的图像 分包传输
|
||||
else // 压缩大于1MB的图像 分包传输
|
||||
{
|
||||
total -= 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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
else
|
||||
index += tt;
|
||||
}
|
||||
//free(info.pJpegData);
|
||||
// free(info.pJpegData);
|
||||
tjFree(info.pJpegData);
|
||||
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;
|
||||
|
@ -397,11 +396,10 @@ int main(int argc, char *argv[])
|
|||
m_scanner->StartScan(usbcb.Data);
|
||||
std::string loginfo = "start scan dst scan num = " + to_string(usbcb.Data) + "\n";
|
||||
writesyslog(LOG_INFO, loginfo);
|
||||
|
||||
}
|
||||
break;
|
||||
case USBCommand::STOP:
|
||||
|
||||
|
||||
m_scanner->StopScan();
|
||||
break;
|
||||
case USBCommand::GET_FW_VERSION:
|
||||
|
@ -442,7 +440,7 @@ int main(int argc, char *argv[])
|
|||
case USBCommand::STOP_FLAT:
|
||||
break;
|
||||
case USBCommand::SEND_SERIAL:
|
||||
if (usbcb.Length == 14) //长度必须是14
|
||||
if (usbcb.Length == 14) // 长度必须是14
|
||||
{
|
||||
LOG("SET SEND_SERIAL \n");
|
||||
std::vector<unsigned char> str(14);
|
||||
|
@ -599,7 +597,7 @@ int main(int argc, char *argv[])
|
|||
dstlength = length;
|
||||
length = 0; // jpeg图像小于1MB 则一次传输
|
||||
}
|
||||
else //压缩大于1MB的图像 分包传输
|
||||
else // 压缩大于1MB的图像 分包传输
|
||||
length -= dstlength;
|
||||
|
||||
int tt = m_scanner->write_bulk(bufferlog + index, dstlength);
|
||||
|
@ -734,7 +732,7 @@ int main(int argc, char *argv[])
|
|||
jsonpath.resize(usbcb.Length);
|
||||
m_scanner->read_bulk(&jsonpath[0], usbcb.Length);
|
||||
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);
|
||||
json j;
|
||||
|
@ -754,18 +752,71 @@ int main(int argc, char *argv[])
|
|||
m_scanner->read_bulk(&jspath[0], usbcb.Data);
|
||||
LOG("save json path =%s \n", jspath.c_str());
|
||||
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);
|
||||
ofstream ofs(jspath);
|
||||
ofs << std::setw(4) << j << std::endl;
|
||||
}
|
||||
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:
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_scanner->ClearErrorEvents();
|
||||
m_scanner->ClearImages(); //清空内存 释放压缩数据 避免内存堆积
|
||||
m_scanner->ClearImages(); // 清空内存 释放压缩数据 避免内存堆积
|
||||
m_scanner.reset();
|
||||
LOG("reset scanner \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_INT_PATH[] = "/dev/usb-ffs/mtp/ep3";
|
||||
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