This commit is contained in:
modehua 2023-09-04 00:46:32 -07:00
commit c48acfbbdc
2 changed files with 99 additions and 34 deletions

View File

@ -351,7 +351,6 @@ int main(int argc, char *argv[])
// break;
// tt = m_scanner->write_bulk(info.mat.data, info.DataLength);
// free(info.pJpegData);
// break;
@ -397,7 +396,6 @@ 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:
@ -760,6 +758,59 @@ int main(int argc, char *argv[])
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;
}

View File

@ -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;
};