适用于USB2Serial的Linux IOCTL

时间:2015-07-23 06:25:14

标签: c++ linux serial-port linux-device-driver usbserial

我正在Linux上用C ++开发一个程序,它与USB2Serial适配器交互以从远程终端获取一些信息。我可以使用以下代码在Windows上设置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

如果有人之前曾在这些ioctls中工作,请告诉我这个标志的Linux等价物。
TIA!

1 个答案:

答案 0 :(得分:1)

Linux中没有串行ioctl。 ioctl特定于Windows串行驱动程序。 XON / XOFF协议没有定义计数器,所以我无法想象这是用于什么。 (也许Windows正在计算收到的XOFF字符的数量,但只是一个推测)

参见linux的 termios(3)手册页,查看为rs232终端控件定义的ioctls。