Мой сканер (функция сканера многофункционального принтера MX860) распознавался с помощью команды sane-find-scanner
или scanimage -L
. Он работал с Simple Scan, утилитой scanimage
и sane-backend
(с C++). Внезапно он перестал работать - устройство больше не распознается в Linux.
Я использую Lubuntu 18.04/Windows 10 с двойной загрузкой. Windows 10 по-прежнему распознает сканер.
Это произошло, когда я использовал sane-backend
в C++, но я не уверен, как это могло вызвать ошибку - я не думаю, что код мог нарушить распознавание сканера. Принтер определенно поддерживается в здравом уме, он надежно подключен к источнику питания и подключен через USB-кабель к моему компьютеру.
Если вы думаете, что это может быть виновником, вот код C++. Он считывает со сканера и сохраняет данные в файл изображения PNM. Он работал нормально, пока метод outFile.open()
внезапно не начал возвращать статус неверного Invalid argument
, то есть когда scanimage -L
перестал распознавать сканер.
unsigned char data[50000];
int maxLength = 50000;
int length;
std::ofstream outFile;
outFile.open("./out/test.pnm");
SANE_Handle handle;
SANE_Parameters parm;
SANE_Status openStatus = sane_open("pixma:04A91735_10C369", &handle);
SANE_Status paramStatus = sane_get_parameters(handle, &parm);
SANE_Status startStatus = sane_start(handle);
SANE_Status readStatus;
// write header of PNM file
outFile << "P6\n# SANE data follows\n" << parm.pixels_per_line << " " << parm.lines << "\n" << ((parm.depth <= 8) ? 255 : 65535) << "\n";
do {
readStatus = sane_read(handle, data, maxLength, &length);
outFile.write((const char *) data, length);
} while(readStatus == SANE_STATUS_GOOD);
sane_close(handle);
outFile.close();
// debugging
std::cout << sane_strstatus(openStatus) << std::endl;
std::cout << sane_strstatus(paramStatus) << std::endl;
std::cout << sane_strstatus(startStatus) << std::endl;
std::cout << sane_strstatus(readStatus) << " " << length << std::endl;
Какие-нибудь мысли?