Использование Windows я могу легко общаться с моим устройством USB, используя следующий упрощенный код:ioctrl с помощью пропуска через SCSI
DWORD dwJunk; // discard results from DeviceIOControl()
int iReply;
char cBuffer[100];
// cBuffer is initialized here.
HANDLE hDevice; // handle to the drive to be examined
CString sDrive = _T(\\\\.\\H:); // drive H: for this test
hDevice = CreateFile(sDrive, // drive to open
GENERIC_READ | GENERIC_WRITE, // read and write access to the drive
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // do not copy file attributes
iReply = DeviceIoControl(hDevice, IOCTL_SCSI_PASS_THROUGH_DIRECT, &cBuffer, sizeof(cBuffer), &cBuffer, sizeof(cBuffer), &dwJunk, (LPOVERLAPPED)NULL);
Я пытаюсь сделать то же самое в Linux, но не смогли выяснить ioctrl(), или лучше разместить структуру. Фрагмент кода будет оценен по достоинству. Благодарю.
Благодарим вас за то, что нашли время, чтобы опубликовать ссылки. Ваши параметры будут именно то, что я ищу, но я считаю, что волшебным словом является код запроса для эквивалента Windows «IOCTL_SCSI_PASS_THROUGH_DIRECT». Я уже занимаюсь поиском и отключением на протяжении более 2 недель, но не нашел кода, который работает в Linux. В Windows код работает со стандартными драйверами, поэтому я не верю, что код запроса зависит от устройства. Все, что я хочу сделать, это отправить буфер на USB-устройство. Затем устройство USB обновит буфер. – MaxiFlash
Действительно ли 'SG_IO' вам нужно? * «SG_IO ioctl позволяет пользовательским приложениям отправлять команды SCSI на устройство». * [См. Здесь] (http://sg.danny.cz/sg/sg_io.html) – ollo
Я только что посмотрел SG_IO, и это звучит за исключением того, что ему нужно правильно заполнить sg_io_hdr_t - и это выглядит сложнее, особенно в том, что ему нужна команда SCSI, которой у меня нет. Все, что я хочу сделать, - прозрачно отправить 100-байтовый буфер на USB-устройство. В Windows это так просто, я просто поставлю буфер и размер буфера. Неужели что-то вроде этого должно существовать в Linux? [EDIT] Я только что посмотрел на вашу последнюю ссылку, и это может быть то, что я хочу. Мне придется подождать до завтра, чтобы попробовать. Я отвечу завтра. – MaxiFlash