Я разрабатываю программу на C ++ для Linux, которая взаимодействует с адаптером USB2Serial для получения некоторой информации с удаленного терминала. Я был в состоянии установить это IOCTL на окнах, используя следующий код:
#define IOCTL_SERIAL_XOFF_COUNTER CTL_CODE(FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS)
unsigned char xoff_counter[] = {0xd0,0x07,0x00,0x00,0x05,0x00,0x00,0x00,0x13,0x00,0x00,0x00};
bool result = DeviceIoControl(file,IOCTL_SERIAL_XOFF_COUNTER,
&xoff_counter, sizeof(xoff_counter),
NULL,0,
&junk,
&o);
Я попытался сделать то же самое в Linux, используя следующий код:
#define SERIAL_XOFF_COUNTER 28
unsigned char xoff_counter[] = {0xd0,0x07,0x00,0x00,0x05,0x00,0x00,0x00,0x13,0x00,0x00,0x00};
int retVal = ioctl(fd,SERIAL_XOFF_COUNTER,xoff_counter);
if(retVal < 0){
cout << "Error while setting ioctl:"<<strerror(errno)<<endl;
}
Это вызывает ошибку при запуске программы:
Error while setting ioctl:Inappropriate ioctl for device
Если кто-то работал с этими ioctl раньше, пожалуйста, дайте мне знать, каковы эквиваленты Linux для этого флага.
ТИА!
В Linux нет серийного ioctl для этого. Этот ioctl специфичен для последовательного драйвера Windows. Протокол XON / XOFF не имеет определенных счетчиков, поэтому я не могу представить, для чего он используется. (возможно, Windows считает количество полученных символов XOFF, но только предположение)
Увидеть termios (3) Страница руководства Linux, чтобы увидеть ioctls, определенные для управления терминалом rs232.