C++ Termios配置

C++ Termios配置,c++,objective-c,serial-port,termios,C++,Objective C,Serial Port,Termios,在MAC OS X 10.10程序中,我很难为RS-485串行通信正确设置termios,因为我使用的是starcom USB→ 采用FTDI芯片的RS-485 我需要设置以下内容: 1起始位0位 8数据位 1奇偶校验位 1停止位1位 19200波特 通信是二进制的,因此没有停止字符 目前,我已经找到了如何设置大多数设置,请参见下面的代码,但我没有找到告诉termios我想要一个开始位的位置 @property(readwrite) int fileDescr

在MAC OS X 10.10程序中,我很难为RS-485串行通信正确设置termios,因为我使用的是starcom USB→ 采用FTDI芯片的RS-485

我需要设置以下内容:

1起始位0位 8数据位 1奇偶校验位 1停止位1位 19200波特 通信是二进制的,因此没有停止字符

目前,我已经找到了如何设置大多数设置,请参见下面的代码,但我没有找到告诉termios我想要一个开始位的位置

@property(readwrite) int                   fileDescriptor;

_fileDescriptor = open(bsdPath, O_RDWR | O_NOCTTY | O_NONBLOCK);
ioctl(_fileDescriptor, TIOCEXCL)
fcntl(_fileDescriptor, F_SETFL, 0)
tcgetattr(_fileDescriptor, &gOriginalTTYAttrs)

struct termios options = gOriginalTTYAttrs;
cfmakeraw(&options);
struct termios* rawOptions = &options;

// Timeout 100 ms
rawOptions->c_cc[VTIME] = 1;
rawOptions->c_cc[VMIN] = 0;

// 8 bits
rawOptions->c_cflag |= CS8;

// Parity ODD
rawOptions->c_cflag |= PARENB;
rawOptions->c_cflag |= PARODD;

// Stop bit (I hope it means one stop bit)
rawOptions->c_cflag = rawOptions->c_cflag & ~CSTOPB;

// Flow control none 
rawOptions->c_cflag = rawOptions->c_cflag & ~CRTSCTS;
rawOptions->c_cflag = rawOptions->c_cflag & ~(CDTR_IFLOW | CDSR_OFLOW);
rawOptions->c_cflag = rawOptions->c_cflag & ~CCAR_OFLOW;

// Turn on hangup on close (NO IDEA WHAT IT DOES)
rawOptions->c_cflag |= HUPCL;
// Set local mode on (NO IDEA WHAT IT DOES)
rawOptions->c_cflag |= CLOCAL;
// Enable receiver (USEFUL, I GUESS)
rawOptions->c_cflag |= CREAD;
// Turn off canonical mode and signals (NO IDEA WHAT IT DOES)
rawOptions->c_lflag &= ~(ICANON /*| ECHO*/ | ISIG);

// Raw (binary output)
rawOptions->c_oflag &= ~OPOST;

// 19200 baud
cfsetspeed(rawOptions, 19200);

// Applying settings
tcsetattr(_fileDescriptor, TCSANOW, rawOptions);

我没有找到告诉termios我想要开始位的位置-没有与异步开始位相关的配置选项。RS232/RS485字符帧中始终有一个起始位。您的代码应该始终检查系统调用的返回代码是否有错误。谢谢你的回复。那么我想也没有char这个词了吧?是否由应用程序添加它?配置中不需要术语字符。只有规范模式有行尾字符。对于非规范的,即。原始模式输入,没有行规程层,消息/数据包/数据报必须由读取tty设备文件的应用程序进行扫描和解析。一个可读和可维护的协议实现需要结构良好的代码。因此,我实际上必须轮询接口以获取任何新数据,直到在数据包分析之后,我确定没有更多的数据可接收为止?